版博士V2.0程序
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 

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