版博士V2.0程序
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

1401 wiersze
69 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. dt.Columns.Add(new DataColumn("断栅数量", typeof(int)));//在表中添加int类型的列
  551. dt.Columns.Add(new DataColumn("钢丝断裂数量", typeof(int)));//在表中添加int类型的列
  552. dt.Columns.Add(new DataColumn("残胶堵孔数量", typeof(int)));//在表中添加int类型的列
  553. //插入按钮
  554. dataGridView1.DataSource = dt;
  555. //在datagridview中添加button按钮
  556. //DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
  557. //btn.Name = "Modify";
  558. //btn.HeaderText = "操作";
  559. //btn.DefaultCellStyle.NullValue = "修改";
  560. //dataGridView1.Columns.Add(btn);
  561. //DataGridViewButtonColumn btn2 = new DataGridViewButtonColumn();
  562. //btn2.Name = "HistoryView";
  563. //btn2.HeaderText = "查看";
  564. //btn2.DefaultCellStyle.NullValue = "历史";
  565. //dataGridView1.Columns.Add(btn2);
  566. DataGridViewButtonColumn btn3 = new DataGridViewButtonColumn();
  567. btn3.Name = "Distribution";
  568. btn3.HeaderText = "缺陷分布";
  569. btn3.DefaultCellStyle.NullValue = "分布";
  570. dataGridView1.Columns.Add(btn3);
  571. DataTable dts = (DataTable)dataGridView1.DataSource;
  572. dts.Clear();
  573. foreach (var item in list)
  574. {
  575. //新增
  576. DataRow dr;//行
  577. dr = dts.NewRow();
  578. //dr["选择"] = false;
  579. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  580. dr["检测单号"] = item.DetectOrder;
  581. dr["产品名称"] = item.ProductInfo.Name;
  582. dr["料号"] = item.ProductInfo.Code;
  583. dr["网版编码"] = item.SN;
  584. dr["批次"] = item.BatchId;
  585. dr["合格"] = item.Qualified ? "合格": "不合格";
  586. dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  587. dr["异常情况"] = item.Abnormalities;
  588. dr["修复人员"] = item.RepairCode;
  589. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  590. //根据不同步骤名称插入数据
  591. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  592. foreach (var tdata in dataCnt)
  593. {
  594. tempd = item.SizeDefectInfoList.Where(q => q.StepName == tdata.Key).ToList();
  595. List<double> dataList = new List<double>();
  596. for (int i = 0; i < tempd.Count; i++)
  597. {
  598. dataList.Add(tempd[i].Data);
  599. dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  600. }
  601. if (dataList.Count > 0)
  602. dr[$"{tdata.Key}均值"] = dataList.Average().ToString("0.0000");
  603. else
  604. dr[$"{tdata.Key}均值"] = "0";
  605. #if false
  606. switch (tdata.Key)
  607. {
  608. case "Tension":
  609. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Tension").ToList();
  610. for (int i = 0; i < tempd.Count; i++)
  611. dr[$"张力{i + 1}"] = tempd[i].Data.ToString("0.00") ;
  612. dr["张力均值"] = item.TensionValue.ToString("0.00");
  613. break;
  614. case "Height":
  615. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Height").ToList();
  616. for (int i = 0; i < tempd.Count; i++)
  617. dr[$"厚度{i + 1}"] = tempd[i].Data.ToString("0.00");
  618. dr["厚度均值"] = item.HeightValue.ToString("0.00");
  619. break;
  620. case "Y轴方向PT值检测":
  621. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Y轴方向PT值检测").ToList();
  622. for (int i = 0; i < tempd.Count; i++)
  623. dr[$"Y轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  624. dr["Y轴方向PT值均值"] = item.PTValue.ToString("0.0000");
  625. break;
  626. case "线宽正面":
  627. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "线宽正面").ToList();
  628. for (int i = 0; i < tempd.Count; i++)
  629. dr[$"线宽正面{i + 1}"] = tempd[i].Data.ToString("0.00");
  630. dr["线宽正面均值"] = item.LineWidthValue.ToString("0.00");
  631. break;
  632. case "反面检测":
  633. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "反面检测").ToList();
  634. for (int i = 0; i < tempd.Count; i++)
  635. dr[$"反面检测{i + 1}"] = tempd[i].Data.ToString("0.00");
  636. dr["反面检测均值"] = item.FLineWidthValue.ToString("0.00");
  637. break;
  638. case "X轴方向PT值检测":
  639. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "X轴方向PT值检测").ToList();
  640. for (int i = 0; i < tempd.Count; i++)
  641. dr[$"X轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  642. dr["X轴方向PT值均值"] = item.XPTValue.ToString("0.0000");
  643. break;
  644. case "主栅连接线检测":
  645. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅连接线检测").ToList();
  646. for (int i = 0; i < tempd.Count; i++)
  647. dr[$"主栅连接线检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  648. dr["主栅连接线检测均值"] = item.MGridIntervalValue.ToString("0.0000");
  649. break;
  650. case "主栅宽度检测":
  651. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅宽度检测").ToList();
  652. for (int i = 0; i < tempd.Count; i++)
  653. dr[$"主栅宽度检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  654. dr["主栅宽度检测均值"] = item.MGridWidthValue.ToString("0.0000");
  655. break;
  656. case "主栅间距":
  657. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅间距").ToList();
  658. for (int i = 0; i < tempd.Count; i++)
  659. dr[$"主栅间距值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  660. dr["主栅间距均值"] = item.MGridSpreadValue.ToString("0.0000");
  661. break;
  662. case "细栅间距检测":
  663. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "细栅间距检测").ToList();
  664. for (int i = 0; i < tempd.Count; i++)
  665. dr[$"细栅间距检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  666. dr["细栅间距检测均值"] = item.FGridSpreadValue.ToString("0.0000");
  667. break;
  668. case "背极宽度":
  669. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "背极宽度").ToList();
  670. for (int i = 0; i < tempd.Count; i++)
  671. dr[$"背极宽度值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  672. dr["背极宽度均值"] = item.BackPoleWidthValue.ToString("0.0000");
  673. break;
  674. case "主栅长度检测":
  675. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅长度检测").ToList();
  676. for (int i = 0; i < tempd.Count; i++)
  677. dr[$"主栅长度检测{i + 1}"] = tempd[i].Data.ToString("0.0000");
  678. dr["主栅长度检测均值"] = item.MGridLengthValue.ToString("0.0000");
  679. break;
  680. case "Mark点横向间距":
  681. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Mark点横向间距").ToList();
  682. for (int i = 0; i < tempd.Count; i++)
  683. dr[$"Mark点横向间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  684. dr["Mark点横向间距均值"] = item.MarkXDisValue.ToString("0.0000");
  685. break;
  686. case "Mark点竖向间距":
  687. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Mark点竖向间距").ToList();
  688. for (int i = 0; i < tempd.Count; i++)
  689. dr[$"Mark点竖向间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  690. dr["Mark点竖向间距均值"] = item.MarkYDisValue.ToString("0.0000");
  691. break;
  692. case "鱼叉口长":
  693. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口长").ToList();
  694. for (int i = 0; i < tempd.Count; i++)
  695. dr[$"鱼叉口长{i + 1}"] = tempd[i].Data.ToString("0.0000");
  696. dr["鱼叉口长均值"] = item.ForkLengthValue.ToString("0.0000");
  697. break;
  698. case "鱼叉口宽":
  699. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口宽").ToList();
  700. for (int i = 0; i < tempd.Count; i++)
  701. dr[$"鱼叉口宽{i + 1}"] = tempd[i].Data.ToString("0.0000");
  702. dr["鱼叉口宽均值"] = item.ForkWidthValue.ToString("0.0000");
  703. break;
  704. case "鱼叉口间距":
  705. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口间距").ToList();
  706. for (int i = 0; i < tempd.Count; i++)
  707. dr[$"鱼叉口间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  708. dr["鱼叉口间距均值"] = item.ForkDisValue.ToString("0.0000");
  709. break;
  710. case "蜈蚣角长":
  711. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "蜈蚣角长").ToList();
  712. for (int i = 0; i < tempd.Count; i++)
  713. dr[$"蜈蚣角长{i + 1}"] = tempd[i].Data.ToString("0.0000");
  714. dr["蜈蚣角均值"] = item.ChilopodLengthValue.ToString("0.0000");
  715. break;
  716. case "蜈蚣角宽":
  717. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "蜈蚣角宽").ToList();
  718. for (int i = 0; i < tempd.Count; i++)
  719. dr[$"蜈蚣角宽{i + 1}"] = tempd[i].Data.ToString("0.0000");
  720. dr["蜈蚣角宽均值"] = item.ChilopodWidthValue.ToString("0.0000");
  721. break;
  722. case "分片间隔":
  723. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "分片间隔").ToList();
  724. for (int i = 0; i < tempd.Count; i++)
  725. dr[$"分片间隔{i + 1}"] = tempd[i].Data.ToString("0.0000");
  726. dr["分片间隔均值"] = item.MarkYDisValue.ToString("0.0000");
  727. break;
  728. case "焊点长":
  729. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "焊点长").ToList();
  730. for (int i = 0; i < tempd.Count; i++)
  731. dr[$"焊点长{i + 1}"] = tempd[i].Data.ToString("0.0000");
  732. dr["焊点长均值"] = item.ForkLengthValue.ToString("0.0000");
  733. break;
  734. case "焊点宽":
  735. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "焊点宽").ToList();
  736. for (int i = 0; i < tempd.Count; i++)
  737. dr[$"焊点宽{i + 1}"] = tempd[i].Data.ToString("0.0000");
  738. dr["焊点宽均值"] = item.ForkWidthValue.ToString("0.0000");
  739. break;
  740. case "焊点间隔":
  741. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "焊点间隔").ToList();
  742. for (int i = 0; i < tempd.Count; i++)
  743. dr[$"焊点间隔{i + 1}"] = tempd[i].Data.ToString("0.0000");
  744. dr["焊点间隔均值"] = item.ForkDisValue.ToString("0.0000");
  745. break;
  746. }
  747. #endif
  748. }
  749. dr["堵孔数量"] = item.DKCount;
  750. dr["脏污数量"] = item.ZWCount;
  751. dr["钢丝异常数量"] = item.GSYCCount;
  752. dr["纤维丝数量"] = item.XWSCount;
  753. dr["缺口数量"] = item.QKCount;
  754. dr["针孔数量"] = item.ZKCount;
  755. dr["泡泡数量"] = item.PPCount ;
  756. dr["划伤数量"] = item.HSCount;
  757. dr["压线数量"] = item.YXCount;
  758. dr["斜边数量"] = item.XBCount;
  759. dr["格栅数量"] = item.SXCount;
  760. dr["断栅数量"] = item.DSCount;
  761. dr["钢丝断裂数量"] = item.GSDLCount;
  762. dr["残胶堵孔数量"] = item.CJDKCount;
  763. dts.Rows.Add(dr);//在表的对象的行里添加此行
  764. }
  765. //dts.DefaultView.Sort = "时间戳 desc";
  766. //dts = dts.DefaultView.ToTable();
  767. dataGridView1.DataSource = dts;
  768. this.dataGridView1.Columns[0].Width = 50;
  769. this.dataGridView1.Columns[1].Width = 120;
  770. for (int i = 0; i < 12; i++)
  771. {
  772. this.dataGridView1.Columns[i].Frozen = true;
  773. }
  774. return;
  775. }
  776. #endregion
  777. private void QueryData()
  778. {
  779. QueryOrderData queryOrderData = new QueryOrderData();
  780. queryOrderData.model = "order";
  781. queryOrderData.fields = "*";
  782. queryOrderData.order = "id desc";
  783. queryOrderData.pageNum = this.pageCtrl1.PageIndex;
  784. queryOrderData.pageSize = this.pageCtrl1.PageSize;
  785. queryOrderData.domain = new List<domainItem>();
  786. domainItem startTime = new domainItem();
  787. startTime.FieldName = "CreateTime";
  788. startTime.FieldValue = dateTimePicker1.Value.ToString("yyyy-M-d");
  789. startTime.ConditionalType = 3;
  790. queryOrderData.domain.Add(startTime);
  791. domainItem endTime = new domainItem();
  792. endTime.FieldName = "CreateTime";
  793. endTime.FieldValue = dateTimePicker2.Value.ToString("yyyy-M-d") + " 23:59:59";
  794. endTime.ConditionalType = 5;
  795. queryOrderData.domain.Add(endTime);
  796. //OrderService.GetList
  797. //产品条件
  798. if (!string.IsNullOrEmpty(cbProductCode.Text))
  799. {
  800. domainItem ProductCode = new domainItem();
  801. ProductCode.FieldName = "ProductId";
  802. ProductCode.FieldValue = SysMgr.Instance.ProductIdList[cbProductCode.SelectedIndex].ToString();
  803. ProductCode.ConditionalType = 6;
  804. queryOrderData.domain.Add(ProductCode);
  805. }
  806. //合格条件
  807. if (!string.IsNullOrEmpty(comboBox2.Text))
  808. {
  809. domainItem CompareResult = new domainItem();
  810. CompareResult.FieldName = "Qualified";
  811. CompareResult.FieldValue = comboBox2.Text == "合格"? "1":"0";
  812. CompareResult.ConditionalType = 0;
  813. queryOrderData.domain.Add(CompareResult);
  814. }
  815. //比对条件
  816. if (!string.IsNullOrEmpty(comboBox1.Text))
  817. {
  818. domainItem CompareResultOptions = new domainItem();
  819. CompareResultOptions.FieldName = "CompareResult";
  820. CompareResultOptions.FieldValue = comboBox1.Text == "通过" ? "1" : comboBox1.Text == "未通过" ? "2" : "0";
  821. CompareResultOptions.ConditionalType = 0;
  822. queryOrderData.domain.Add(CompareResultOptions);
  823. }
  824. //异常条件
  825. if (!string.IsNullOrEmpty(comboBox3.Text))
  826. {
  827. domainItem State = new domainItem();
  828. State.FieldName = "State";
  829. State.FieldValue = comboBox3.Text == "修复" ? "5" : comboBox3.Text == "未修复" ? "0" : "10";
  830. State.ConditionalType = 0;
  831. queryOrderData.domain.Add(State);
  832. }
  833. int totalcnt = 0;
  834. JObject str = JObject.Parse(JsonConvert.SerializeObject(queryOrderData));
  835. var list = getTableList(str, out totalcnt);
  836. this.pageCtrl1.DrawControl(totalcnt);
  837. QueryOrders = list;
  838. //自动生成表格
  839. ShowDataTableEx(list);
  840. //总数居
  841. queryOrderData.pageNum = 0;
  842. queryOrderData.pageSize = 0;
  843. JObject str2 = JObject.Parse(JsonConvert.SerializeObject(queryOrderData));
  844. var list2 = getTableList(str2, out totalcnt);
  845. QueryAllOrders = list2;
  846. }
  847. private void skinButton2_Click(object sender, EventArgs e)
  848. {
  849. pageCtrl1.PageIndex = 1;
  850. QueryData();
  851. }
  852. #endregion
  853. #region 表格单击
  854. #region 更新数据
  855. #endregion
  856. private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
  857. {
  858. int Index = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引
  859. if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "操作")
  860. {
  861. //修改数据
  862. AmendantRecordFrm recordFrm = new AmendantRecordFrm(QueryOrders[Index]);
  863. recordFrm.ShowDialog();
  864. //重新显示
  865. QueryData();
  866. }
  867. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "查看")
  868. {
  869. //查看历史
  870. HistoryViewFrm Frm = new HistoryViewFrm(QueryOrders[Index]);
  871. Frm.ShowDialog();
  872. }
  873. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "缺陷分布")
  874. {
  875. //缺陷分布
  876. DistributionFrm Frm = new DistributionFrm(QueryOrders[Index]);
  877. Frm.WindowState = FormWindowState.Maximized;
  878. Frm.ShowDialog();
  879. }
  880. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "选择")
  881. {
  882. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[Index].Cells[0];
  883. Boolean flag = Convert.ToBoolean(checkCell.Value);
  884. if (flag == true) //查找被选择的数据行
  885. {
  886. checkCell.Value = false;
  887. }
  888. else
  889. checkCell.Value = true;
  890. }
  891. }
  892. #endregion
  893. #region 界面调整
  894. private void DataQueryFrm_SizeChanged(object sender, EventArgs e)
  895. {
  896. if (this.WindowState == FormWindowState.Maximized)
  897. {
  898. this.WindowState = FormWindowState.Normal;
  899. this.Top = 0;
  900. this.Left = 0;
  901. this.Width = SystemInformation.WorkingArea.Width;
  902. this.Height = SystemInformation.WorkingArea.Height;
  903. }
  904. }
  905. #endregion
  906. #region 删除
  907. private int delTableList(JObject req)
  908. {
  909. JObject res = new JObject();
  910. try
  911. {
  912. string model = req.Value<string>("model");
  913. string domain = req.Value<JArray>("domain").ToString();
  914. //var idArr = req.Value<JArray>("idList");
  915. //List<int> ids = new List<int>();
  916. //foreach (int id in idArr) ids.Add(id);
  917. int result = OrderService.DeleteList(model, domain);
  918. return 1;
  919. }
  920. catch (Exception ex)
  921. {
  922. }
  923. return 0;
  924. }
  925. private void skinButton3_Click(object sender, EventArgs e)
  926. {
  927. for (int i = 0; i < dataGridView1.Rows.Count; i++)
  928. {
  929. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells[0];
  930. Boolean flag = Convert.ToBoolean(checkCell.Value);
  931. if(flag == true)
  932. {
  933. QueryOrderData delOrderData = new QueryOrderData();
  934. delOrderData.model = "order";
  935. delOrderData.domain = new List<domainItem>();
  936. domainItem doitem = new domainItem();
  937. doitem.FieldName = "Id";
  938. doitem.FieldValue = QueryOrders[i].Id.ToString();
  939. doitem.ConditionalType = 6;
  940. delOrderData.domain.Add(doitem);
  941. JObject str = JObject.Parse(JsonConvert.SerializeObject(delOrderData));
  942. int ret = delTableList(str);
  943. if (ret == 1)
  944. {
  945. //删除历史
  946. QueryOrderData HistoryOrderData = new QueryOrderData();
  947. HistoryOrderData.model = "OrderHistory";
  948. HistoryOrderData.domain = new List<domainItem>();
  949. domainItem doitem2 = new domainItem();
  950. doitem2.FieldName = "Pid";
  951. doitem2.FieldValue = QueryOrders[i].Id.ToString();
  952. doitem2.ConditionalType = 6;
  953. HistoryOrderData.domain.Add(doitem2);
  954. JObject str2 = JObject.Parse(JsonConvert.SerializeObject(HistoryOrderData));
  955. delTableList(str2);
  956. }
  957. }
  958. }
  959. //重新显示
  960. QueryData();
  961. }
  962. #endregion
  963. #region Excel导出
  964. private void ShowAllDataTableEx(string filePath)
  965. {
  966. //记录数据类型列数
  967. Dictionary<string, int> dataCnt = new Dictionary<string, int>();
  968. DataTable dt = new DataTable(); //建立个数据表
  969. //通用列
  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. dt.Columns.Add(new DataColumn("批次", typeof(string)));//在表中添加string类型的列
  976. dt.Columns.Add(new DataColumn("合格", typeof(string)));//在表中添加string类型的列
  977. dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列
  978. dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列
  979. dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列
  980. dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列
  981. foreach (var item in QueryAllOrders)
  982. {
  983. //老流程
  984. if (item.StepInfo == null || item.StepInfo.ProcessType != "快速流程")
  985. {
  986. //加入数据表
  987. if (item.SizeDefectInfoList == null)
  988. item.SizeDefectInfoList = new List<SizeDefectInfo>();
  989. #region 张力
  990. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  991. {
  992. PointCode = "Tension",
  993. StepName = "张力",
  994. Data = item.Tension1,
  995. });
  996. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  997. {
  998. PointCode = "Tension",
  999. StepName = "张力",
  1000. Data = item.Tension2,
  1001. });
  1002. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1003. {
  1004. PointCode = "Tension",
  1005. StepName = "张力",
  1006. Data = item.Tension3,
  1007. });
  1008. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1009. {
  1010. PointCode = "Tension",
  1011. StepName = "张力",
  1012. Data = item.Tension4,
  1013. });
  1014. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1015. {
  1016. PointCode = "Tension",
  1017. StepName = "张力",
  1018. Data = item.Tension5,
  1019. });
  1020. #endregion
  1021. #region 厚度
  1022. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1023. {
  1024. PointCode = "Height",
  1025. StepName = "厚度",
  1026. Data = item.Height1,
  1027. });
  1028. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1029. {
  1030. PointCode = "Height",
  1031. StepName = "厚度",
  1032. Data = item.Height2,
  1033. });
  1034. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1035. {
  1036. PointCode = "Height",
  1037. StepName = "厚度",
  1038. Data = item.Height3,
  1039. });
  1040. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1041. {
  1042. PointCode = "Height",
  1043. StepName = "厚度",
  1044. Data = item.Height4,
  1045. });
  1046. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1047. {
  1048. PointCode = "Height",
  1049. StepName = "厚度",
  1050. Data = item.Height5,
  1051. });
  1052. #endregion
  1053. #region YPT
  1054. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1055. {
  1056. PointCode = "Y轴方向PT值检测",
  1057. StepName = "Y轴方向PT值",
  1058. Data = item.PT1,
  1059. });
  1060. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1061. {
  1062. PointCode = "Y轴方向PT值检测",
  1063. StepName = "Y轴方向PT值",
  1064. Data = item.PT2,
  1065. });
  1066. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1067. {
  1068. PointCode = "Y轴方向PT值检测",
  1069. StepName = "Y轴方向PT值",
  1070. Data = item.PT3,
  1071. });
  1072. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1073. {
  1074. PointCode = "Y轴方向PT值检测",
  1075. StepName = "Y轴方向PT值",
  1076. Data = item.PT5,
  1077. });
  1078. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1079. {
  1080. PointCode = "Y轴方向PT值检测",
  1081. StepName = "Y轴方向PT值",
  1082. Data = item.PT6,
  1083. });
  1084. #endregion
  1085. #region 线宽
  1086. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1087. {
  1088. PointCode = "线宽正面",
  1089. StepName = "线宽",
  1090. Data = item.LineWidth1,
  1091. });
  1092. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1093. {
  1094. PointCode = "线宽正面",
  1095. StepName = "线宽",
  1096. Data = item.LineWidth2,
  1097. });
  1098. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1099. {
  1100. PointCode = "线宽正面",
  1101. StepName = "线宽",
  1102. Data = item.LineWidth3,
  1103. });
  1104. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1105. {
  1106. PointCode = "线宽正面",
  1107. StepName = "线宽",
  1108. Data = item.LineWidth4,
  1109. });
  1110. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1111. {
  1112. PointCode = "线宽正面",
  1113. StepName = "线宽",
  1114. Data = item.LineWidth5,
  1115. });
  1116. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1117. {
  1118. PointCode = "线宽正面",
  1119. StepName = "线宽",
  1120. Data = item.LineWidth6,
  1121. });
  1122. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1123. {
  1124. PointCode = "线宽正面",
  1125. StepName = "线宽",
  1126. Data = item.LineWidth7,
  1127. });
  1128. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1129. {
  1130. PointCode = "线宽正面",
  1131. StepName = "线宽",
  1132. Data = item.LineWidth8,
  1133. });
  1134. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1135. {
  1136. PointCode = "线宽正面",
  1137. StepName = "线宽",
  1138. Data = item.LineWidth9,
  1139. });
  1140. #endregion
  1141. if (!dataCnt.ContainsKey("张力"))
  1142. dataCnt.Add("张力", 5);
  1143. else
  1144. if (dataCnt["张力"] < 5)
  1145. dataCnt["张力"] = 5;
  1146. if (!dataCnt.ContainsKey("厚度"))
  1147. dataCnt.Add("厚度", 5);
  1148. else
  1149. if (dataCnt["厚度"] < 5)
  1150. dataCnt["厚度"] = 5;
  1151. if (!dataCnt.ContainsKey("Y轴方向PT值检测"))
  1152. dataCnt.Add("Y轴方向PT值检测", 5);
  1153. else
  1154. if (dataCnt["Y轴方向PT值检测"] < 5)
  1155. dataCnt["Y轴方向PT值检测"] = 5;
  1156. if (!dataCnt.ContainsKey("线宽正面"))
  1157. dataCnt.Add("线宽正面", 9);
  1158. else
  1159. if (dataCnt["线宽正面"] < 9)
  1160. dataCnt["线宽正面"] = 9;
  1161. }
  1162. else
  1163. {
  1164. //按照步骤流程分类
  1165. string[] pointType = item.SizeDefectInfoList.Select(t => t.StepName).Distinct().ToList().ToArray();
  1166. for (int i = 0; i < pointType.Length; i++)
  1167. {
  1168. List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.StepName == pointType[i]).ToList();
  1169. if (t.Count > 0)
  1170. {
  1171. //当前测试项数据个数
  1172. if (!dataCnt.ContainsKey(pointType[i]))
  1173. dataCnt.Add(pointType[i], t.Count);
  1174. else
  1175. if (dataCnt[pointType[i]] < t.Count)
  1176. dataCnt[pointType[i]] = t.Count;
  1177. }
  1178. }
  1179. }
  1180. }
  1181. //插入列
  1182. foreach (var item in dataCnt)
  1183. {
  1184. //按步骤名称插入列
  1185. for (int i = 0; i < item.Value; i++)
  1186. dt.Columns.Add(new DataColumn($"{item.Key}-{i + 1}", typeof(string)));
  1187. dt.Columns.Add(new DataColumn($"{item.Key}均值", typeof(string)));
  1188. }
  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. dt.Columns.Add(new DataColumn("针孔数量", typeof(int)));//在表中添加int类型的列
  1195. dt.Columns.Add(new DataColumn("泡泡数量", typeof(int)));//在表中添加int类型的列
  1196. dt.Columns.Add(new DataColumn("划伤数量", typeof(int)));//在表中添加int类型的列
  1197. dt.Columns.Add(new DataColumn("压线数量", typeof(int)));//在表中添加int类型的列
  1198. dt.Columns.Add(new DataColumn("斜边数量", typeof(int)));//在表中添加int类型的列
  1199. dt.Columns.Add(new DataColumn("格栅数量", typeof(int)));//在表中添加int类型的列
  1200. dt.Columns.Add(new DataColumn("断栅数量", typeof(int)));//在表中添加int类型的列
  1201. dt.Columns.Add(new DataColumn("钢丝断裂数量", typeof(int)));//在表中添加int类型的列
  1202. dt.Columns.Add(new DataColumn("残胶堵孔数量", typeof(int)));//在表中添加int类型的列
  1203. foreach (var item in QueryAllOrders)
  1204. {
  1205. //新增
  1206. DataRow dr;//行
  1207. dr = dt.NewRow();
  1208. //dr["选择"] = false;
  1209. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  1210. dr["检测单号"] = item.DetectOrder;
  1211. dr["产品名称"] = item.ProductInfo.Name;
  1212. dr["料号"] = item.ProductInfo.Code;
  1213. dr["网版编码"] = item.SN;
  1214. dr["批次"] = item.BatchId;
  1215. dr["合格"] = item.Qualified ? "合格" : "不合格";
  1216. dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  1217. dr["异常情况"] = item.Abnormalities;
  1218. dr["修复人员"] = item.RepairCode;
  1219. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  1220. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  1221. foreach (var tdata in dataCnt)
  1222. {
  1223. tempd = item.SizeDefectInfoList.Where(q => q.StepName == tdata.Key).ToList();
  1224. List<double> dataList = new List<double>();
  1225. //for (int i = 0; i < tempd.Count; i++)
  1226. // dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1227. //dr[$"{tdata.Key}均值"] = item.TensionValue.ToString("0.0000");
  1228. for (int i = 0; i < tempd.Count; i++)
  1229. {
  1230. dataList.Add(tempd[i].Data);
  1231. dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1232. }
  1233. if (dataList.Count > 0)
  1234. dr[$"{tdata.Key}均值"] = dataList.Average().ToString("0.0000");
  1235. else
  1236. dr[$"{tdata.Key}均值"] = "0";
  1237. }
  1238. dr["堵孔数量"] = item.DKCount;
  1239. dr["脏污数量"] = item.ZWCount;
  1240. dr["钢丝异常数量"] = item.GSYCCount;
  1241. dr["纤维丝数量"] = item.XWSCount;
  1242. dr["缺口数量"] = item.QKCount;
  1243. dr["针孔数量"] = item.ZKCount;
  1244. dr["泡泡数量"] = item.PPCount;
  1245. dr["划伤数量"] = item.HSCount;
  1246. dr["压线数量"] = item.YXCount;
  1247. dr["斜边数量"] = item.XBCount;
  1248. dr["格栅数量"] = item.SXCount;
  1249. dr["断栅数量"] = item.DSCount;
  1250. dr["钢丝断裂数量"] = item.GSDLCount;
  1251. dr["残胶堵孔数量"] = item.CJDKCount;
  1252. dt.Rows.Add(dr);//在表的对象的行里添加此行
  1253. }
  1254. try
  1255. {
  1256. // 创建一个新的CSV文件并写入数据
  1257. using (StreamWriter writer = new StreamWriter(filePath, false, UnicodeEncoding.GetEncoding("GB2312")))
  1258. {
  1259. // 写入CSV文件的标题行
  1260. for (int i = 0; i < dt.Columns.Count; i++)
  1261. {
  1262. writer.Write(dt.Columns[i].ColumnName + ",");
  1263. }
  1264. writer.Write("\r\n");
  1265. for (int i = 0; i < dt.Rows.Count; i++)
  1266. {
  1267. // 写入数据行
  1268. for (int j = 0; j < dt.Columns.Count; j++)
  1269. {
  1270. writer.Write(dt.Rows[i][j] + ",");
  1271. }
  1272. writer.Write("\r\n");
  1273. //Console.WriteLine("CSV文件写入成功!");
  1274. }
  1275. }
  1276. }
  1277. catch (Exception ex)
  1278. {
  1279. MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1280. }
  1281. return;
  1282. }
  1283. private void skinButton1_Click(object sender, EventArgs e)
  1284. {
  1285. DataTable dt = (DataTable)dataGridView1.DataSource;
  1286. if (dt.Rows.Count > 0)
  1287. {
  1288. SaveFileDialog fileDialog = new SaveFileDialog();
  1289. fileDialog.Filter = "数据文件(*.csv)|*.csv";
  1290. fileDialog.Title = "保存数据";
  1291. //保存对话框是否记忆上次打开的目录
  1292. fileDialog.RestoreDirectory = true;
  1293. if (fileDialog.ShowDialog() == DialogResult.OK)
  1294. {
  1295. try
  1296. {
  1297. string filePath = fileDialog.FileName; // CSV文件路径
  1298. ShowAllDataTableEx(filePath);
  1299. MessageBox.Show("数据导出成功!" , "完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
  1300. }
  1301. catch (Exception ex)
  1302. {
  1303. MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1304. }
  1305. }
  1306. }
  1307. }
  1308. #endregion
  1309. private void btnClear_Click(object sender, EventArgs e)
  1310. {
  1311. cbProductCode.Text = "";
  1312. }
  1313. }
  1314. }