版博士V2.0程序
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 

1880 rindas
92 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;
  12. using System.Collections.Generic;
  13. using System.ComponentModel;
  14. using System.Data;
  15. using System.Data.Common;
  16. using System.Drawing;
  17. using System.Dynamic;
  18. using System.IO;
  19. using System.Linq;
  20. using System.Reflection;
  21. using System.Runtime.InteropServices.ComTypes;
  22. using System.Runtime.Serialization;
  23. using System.Text;
  24. using System.Threading.Tasks;
  25. using System.Web.Routing;
  26. using System.Web.UI.WebControls;
  27. using System.Windows.Forms;
  28. using static MaiMuControl.Form1;
  29. using DataTable = System.Data.DataTable;
  30. using Point = System.Drawing.Point;
  31. using Excel = Microsoft.Office.Interop.Excel;
  32. namespace MaiMuAOI.SysUI.DefectPicShow
  33. {
  34. public partial class DataQueryFrm : Form
  35. {
  36. Service.OrderService OrderService = new Service.OrderService();
  37. List<Order> QueryOrders = new List<Order>();
  38. List<Order> QueryAllOrders = new List<Order>();
  39. List<string> ItemName = new List<string>();
  40. List<string> labels = new List<string>();
  41. public DataQueryFrm()
  42. {
  43. InitializeComponent();
  44. UIStyle.SetUIStyle(this);
  45. this.uiTitel1.FatherForm = this;
  46. //反射 循环 获取数据
  47. labels.Add("Tension");
  48. labels.Add("Height");
  49. Type t = typeof(PointTestType);
  50. FieldInfo[] fieldInfos = t.GetFields();
  51. foreach (var item in fieldInfos)
  52. {
  53. //不是枚举字段不处理
  54. if (item.FieldType.IsEnum)
  55. {
  56. //名称可以直接获取
  57. ItemName.Add(item.Name);
  58. labels.Add(item.Name);
  59. }
  60. }
  61. }
  62. private void DataQueryFrm_Load(object sender, EventArgs e)
  63. {
  64. LoadPdtList(SysMgr.Instance.ProductCodeList);
  65. //激活OnPageChanged事件
  66. pageCtrl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);
  67. }
  68. #region 切页
  69. /// <summary>
  70. /// 页数变化时调用绑定数据方法
  71. /// </summary>
  72. /// <param name="sender"></param>
  73. /// <param name="e"></param>
  74. private void pagerControl1_OnPageChanged(object sender, EventArgs e)
  75. {
  76. QueryData();
  77. }
  78. #endregion
  79. #region 加载料号
  80. private string[] pdtlistData;
  81. private void LoadPdtList(List<string> list)
  82. {
  83. this.cbProductCode.Items.Clear();
  84. this.pdtlistData = list.ToArray();
  85. cbProductCode.Items.AddRange(pdtlistData);//比使用DataSource速度要快一些
  86. cbProductCode.TextUpdate += cobList_TextUpdate;//重新绑定事件
  87. cbProductCode.KeyDown += CobList_KeyDown;
  88. this.cbProductCode.Text = "";
  89. cbProductCode.Focus();
  90. cbProductCode.SelectAll();
  91. }
  92. private void CobList_KeyDown(object sender, KeyEventArgs e)
  93. {
  94. ComboBox ctrl = sender as ComboBox;
  95. if (e.KeyCode == Keys.Enter)
  96. {
  97. if (ctrl.Items.Count == 1)
  98. ctrl.Text = ctrl.Items[0].ToString();
  99. }
  100. }
  101. private void cobList_TextUpdate(object sender, EventArgs e)
  102. {
  103. ComboBox ctrl = sender as ComboBox;
  104. if (ctrl.Text != null)
  105. {
  106. string str = ctrl.Text; //获取cb_material控件输入内
  107. //清空combobox
  108. ctrl.DataSource = null;
  109. ctrl.Items.Clear();
  110. string[] workOrderFiltered;
  111. workOrderFiltered = pdtlistData.Where(x => x.IndexOf(str, StringComparison.CurrentCultureIgnoreCase) != -1).ToArray();//忽略大小写
  112. ctrl.Items.AddRange(workOrderFiltered);//比使用DataSource速度要快一些
  113. // 不存在符合条件时
  114. //设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
  115. ctrl.Cursor = Cursors.Default; //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置
  116. if (workOrderFiltered.Length > 0)
  117. {
  118. if (!ctrl.DroppedDown)
  119. ctrl.DroppedDown = true; // 自动弹出下拉框
  120. }
  121. ctrl.SelectionStart = str.Length; // 设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
  122. }
  123. }
  124. #endregion
  125. #region 查询数据
  126. #region 数据库查询
  127. private class domainItem
  128. {
  129. public string FieldName { get; set; }
  130. public string FieldValue { get; set; }
  131. public int ConditionalType { get; set; }
  132. }
  133. private class QueryOrderData
  134. {
  135. public string model { get; set; }
  136. public string fields { get; set; }
  137. public List<domainItem> domain { get; set; }
  138. public string order { get; set; }
  139. public int pageNum { get; set; }
  140. public int pageSize { get; set; }
  141. }
  142. private List<Order> getTableList(JObject req, out int TotalCnt)
  143. {
  144. try
  145. {
  146. string model, fields = "", domain = "", order = "";
  147. int pageNum = 0, pageSize = 0, totalCount = 0;
  148. model = req.Value<string>("model");
  149. if (req.ContainsKey("fields")) fields = req.Value<string>("fields");
  150. if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
  151. if (req.ContainsKey("order")) order = req.Value<string>("order");
  152. if (req.ContainsKey("pageNum")) pageNum = req.Value<int>("pageNum");
  153. if (req.ContainsKey("pageSize")) pageSize = req.Value<int>("pageSize");
  154. //创建表达式
  155. var exp1 = Expressionable.Create<Order>()
  156. //.AndIF((int)cobProductList.SelectedValue > 0, it => it.ProductId == (int)cobProductList.SelectedValue)
  157. //.AndIF((int)cobStepList.SelectedValue > 0, it => it.StepId == (int)cobStepList.SelectedValue)
  158. //.AndIF(dateTimePicker1.Checked, it => it.CreateTime >= dateTimePicker1.Value)
  159. //.AndIF(dateTimePicker2.Checked, it => it.CreateTime < dateTimePicker2.Value)
  160. .ToExpression();//注意 这一句 不能少
  161. var list = OrderService.GetListEx(fields, domain, order, pageNum, pageSize, ref totalCount);
  162. TotalCnt = totalCount;
  163. //var list = svcOrder.GetListNav(pageNum, pageSize, ref totalCount, exp1);
  164. return list;
  165. }
  166. catch (Exception ex)
  167. {
  168. ;
  169. }
  170. TotalCnt = 0;
  171. return null;
  172. }
  173. #endregion
  174. #region 新老流程数据分析
  175. private void ShowDataTableEx(List<Order> list)
  176. {
  177. dataGridView1.Columns.Clear();
  178. //记录数据类型列数
  179. Dictionary<string, int> dataCnt = new Dictionary<string, int>();
  180. DataTable dt = new DataTable(); //建立个数据表
  181. //通用列
  182. DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn();
  183. chk.Name = "Select";
  184. chk.HeaderText = "选择";
  185. dataGridView1.Columns.Add(chk);
  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. //dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列
  194. //dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列
  195. //dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列
  196. dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列
  197. foreach(var item in list)
  198. {
  199. //老流程
  200. if(item.StepInfo == null ||item.StepInfo.ProcessType != "快速流程")
  201. {
  202. //加入数据表
  203. if(item.SizeDefectInfoList == null)
  204. item.SizeDefectInfoList = new List<SizeDefectInfo>();
  205. #region 张力
  206. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  207. {
  208. PointCode = "Tension",
  209. StepName = "张力",
  210. Data = item.Tension1,
  211. });
  212. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  213. {
  214. PointCode = "Tension",
  215. StepName = "张力",
  216. Data = item.Tension2,
  217. });
  218. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  219. {
  220. PointCode = "Tension",
  221. StepName = "张力",
  222. Data = item.Tension3,
  223. });
  224. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  225. {
  226. PointCode = "Tension",
  227. StepName = "张力",
  228. Data = item.Tension4,
  229. });
  230. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  231. {
  232. PointCode = "Tension",
  233. StepName = "张力",
  234. Data = item.Tension5,
  235. });
  236. #endregion
  237. #region 厚度
  238. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  239. {
  240. PointCode = "Height",
  241. StepName = "厚度",
  242. Data = item.Height1,
  243. });
  244. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  245. {
  246. PointCode = "Height",
  247. StepName = "厚度",
  248. Data = item.Height2,
  249. });
  250. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  251. {
  252. PointCode = "Height",
  253. StepName = "厚度",
  254. Data = item.Height3,
  255. });
  256. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  257. {
  258. PointCode = "Height",
  259. StepName = "厚度",
  260. Data = item.Height4,
  261. });
  262. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  263. {
  264. PointCode = "Height",
  265. StepName = "厚度",
  266. Data = item.Height5,
  267. });
  268. #endregion
  269. #region YPT
  270. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  271. {
  272. PointCode = "Y轴方向PT值检测",
  273. StepName = "Y轴方向PT值",
  274. Data = item.PT1,
  275. });
  276. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  277. {
  278. PointCode = "Y轴方向PT值检测",
  279. StepName = "Y轴方向PT值",
  280. Data = item.PT2,
  281. });
  282. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  283. {
  284. PointCode = "Y轴方向PT值检测",
  285. StepName = "Y轴方向PT值",
  286. Data = item.PT3,
  287. });
  288. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  289. {
  290. PointCode = "Y轴方向PT值检测",
  291. StepName = "Y轴方向PT值",
  292. Data = item.PT5,
  293. });
  294. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  295. {
  296. PointCode = "Y轴方向PT值检测",
  297. StepName = "Y轴方向PT值",
  298. Data = item.PT6,
  299. });
  300. #endregion
  301. #region 线宽
  302. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  303. {
  304. PointCode = "线宽正面",
  305. StepName = "线宽",
  306. Data = item.LineWidth1,
  307. });
  308. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  309. {
  310. PointCode = "线宽正面",
  311. StepName = "线宽",
  312. Data = item.LineWidth2,
  313. });
  314. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  315. {
  316. PointCode = "线宽正面",
  317. StepName = "线宽",
  318. Data = item.LineWidth3,
  319. });
  320. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  321. {
  322. PointCode = "线宽正面",
  323. StepName = "线宽",
  324. Data = item.LineWidth4,
  325. });
  326. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  327. {
  328. PointCode = "线宽正面",
  329. StepName = "线宽",
  330. Data = item.LineWidth5,
  331. });
  332. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  333. {
  334. PointCode = "线宽正面",
  335. StepName = "线宽",
  336. Data = item.LineWidth6,
  337. });
  338. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  339. {
  340. PointCode = "线宽正面",
  341. StepName = "线宽",
  342. Data = item.LineWidth7,
  343. });
  344. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  345. {
  346. PointCode = "线宽正面",
  347. StepName = "线宽",
  348. Data = item.LineWidth8,
  349. });
  350. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  351. {
  352. PointCode = "线宽正面",
  353. StepName = "线宽",
  354. Data = item.LineWidth9,
  355. });
  356. #endregion
  357. if (!dataCnt.ContainsKey("张力"))
  358. dataCnt.Add("张力", 5);
  359. else
  360. if (dataCnt["张力"] < 5)
  361. dataCnt["张力"] = 5;
  362. if (!dataCnt.ContainsKey("厚度"))
  363. dataCnt.Add("厚度", 5);
  364. else
  365. if (dataCnt["厚度"] < 5)
  366. dataCnt["厚度"] = 5;
  367. if (!dataCnt.ContainsKey("Y轴方向PT值检测"))
  368. dataCnt.Add("Y轴方向PT值检测", 5);
  369. else
  370. if (dataCnt["Y轴方向PT值检测"] < 5)
  371. dataCnt["Y轴方向PT值检测"] = 5;
  372. if (!dataCnt.ContainsKey("线宽正面"))
  373. dataCnt.Add("线宽正面", 9);
  374. else
  375. if (dataCnt["线宽正面"] < 9)
  376. dataCnt["线宽正面"] = 9;
  377. }
  378. else
  379. {
  380. //string[] pointType = new string[19] {"Tension", "Height", "Y轴方向PT值检测" , "线宽正面" , "反面检测" ,
  381. // "X轴方向PT值检测","主栅连接线检测","主栅宽度检测","主栅间距","细栅间距检测","背极宽度",
  382. // "主栅长度检测","Mark点横向间距","Mark点竖向间距","鱼叉口长","鱼叉口宽","鱼叉口间距", "蜈蚣角长", "蜈蚣角宽"};
  383. //按照检测项目分类
  384. //string[] pointType = labels.ToArray();
  385. //for (int i = 0; i < pointType.Length; i++)
  386. //{
  387. // List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.PointCode == pointType[i]).ToList();
  388. // if (t.Count > 0)
  389. // {
  390. // //当前测试项数据个数
  391. // if (!dataCnt.ContainsKey(pointType[i]))
  392. // dataCnt.Add(pointType[i], t.Count);
  393. // else
  394. // if (dataCnt[pointType[i]] < t.Count)
  395. // dataCnt[pointType[i]] = t.Count;
  396. // }
  397. //}
  398. //按照步骤流程分类
  399. string[] pointType = item.SizeDefectInfoList.Select(t => t.StepName).Distinct().ToList().ToArray();
  400. for (int i = 0; i < pointType.Length; i++)
  401. {
  402. List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.StepName == pointType[i]&& !q.isAverage).ToList();
  403. if (t.Count > 0)
  404. {
  405. //当前测试项数据个数
  406. if (!dataCnt.ContainsKey(pointType[i]))
  407. dataCnt.Add(pointType[i], t.Count);
  408. else
  409. if (dataCnt[pointType[i]] < t.Count)
  410. dataCnt[pointType[i]] = t.Count;
  411. }
  412. }
  413. }
  414. }
  415. //插入列
  416. foreach (var item in dataCnt)
  417. {
  418. //按步骤名称插入列
  419. for (int i = 0; i < item.Value; i++)
  420. dt.Columns.Add(new DataColumn($"{item.Key}-{i + 1}", typeof(string)));
  421. dt.Columns.Add(new DataColumn($"{item.Key}均值", typeof(string)));
  422. #if false
  423. switch (item.Key)
  424. {
  425. case "Tension":
  426. for (int i = 0; i < item.Value; i++)
  427. dt.Columns.Add(new DataColumn($"张力{i+1}", typeof(string)));
  428. dt.Columns.Add(new DataColumn("张力均值", typeof(string)));
  429. break;
  430. case "Height":
  431. for (int i = 0; i < item.Value; i++)
  432. dt.Columns.Add(new DataColumn($"厚度{i + 1}", typeof(string)));
  433. dt.Columns.Add(new DataColumn("厚度均值", typeof(string)));
  434. break;
  435. case "Y轴方向PT值检测":
  436. for (int i = 0; i < item.Value; i++)
  437. dt.Columns.Add(new DataColumn($"Y轴方向PT值{i + 1}", typeof(string)));
  438. dt.Columns.Add(new DataColumn("Y轴方向PT值均值", typeof(string)));
  439. break;
  440. case "线宽正面":
  441. for (int i = 0; i < item.Value; i++)
  442. dt.Columns.Add(new DataColumn($"线宽正面{i + 1}", typeof(string)));
  443. dt.Columns.Add(new DataColumn("线宽正面均值", typeof(string)));
  444. break;
  445. case "反面检测":
  446. for (int i = 0; i < item.Value; i++)
  447. dt.Columns.Add(new DataColumn($"反面检测{i + 1}", typeof(string)));
  448. dt.Columns.Add(new DataColumn("反面检测均值", typeof(string)));
  449. break;
  450. case "X轴方向PT值检测":
  451. for (int i = 0; i < item.Value; i++)
  452. dt.Columns.Add(new DataColumn($"X轴方向PT值{i + 1}", typeof(string)));
  453. dt.Columns.Add(new DataColumn("X轴方向PT值均值", typeof(string)));
  454. break;
  455. case "主栅连接线检测":
  456. for (int i = 0; i < item.Value; i++)
  457. dt.Columns.Add(new DataColumn($"主栅连接线检测值{i + 1}", typeof(string)));
  458. dt.Columns.Add(new DataColumn("主栅连接线检测均值", typeof(string)));
  459. break;
  460. case "主栅宽度检测":
  461. for (int i = 0; i < item.Value; i++)
  462. dt.Columns.Add(new DataColumn($"主栅宽度检测值{i + 1}", typeof(string)));
  463. dt.Columns.Add(new DataColumn("主栅宽度检测均值", typeof(string)));
  464. break;
  465. case "主栅间距":
  466. for (int i = 0; i < item.Value; i++)
  467. dt.Columns.Add(new DataColumn($"主栅间距值{i + 1}", typeof(string)));
  468. dt.Columns.Add(new DataColumn("主栅间距均值", typeof(string)));
  469. break;
  470. case "细栅间距检测":
  471. for (int i = 0; i < item.Value; i++)
  472. dt.Columns.Add(new DataColumn($"细栅间距检测值{i + 1}", typeof(string)));
  473. dt.Columns.Add(new DataColumn("细栅间距检测均值", typeof(string)));
  474. break;
  475. case "背极宽度":
  476. for (int i = 0; i < item.Value; i++)
  477. dt.Columns.Add(new DataColumn($"背极宽度值{i + 1}", typeof(string)));
  478. dt.Columns.Add(new DataColumn("背极宽度均值", typeof(string)));
  479. break;
  480. case "主栅长度检测":
  481. for (int i = 0; i < item.Value; i++)
  482. dt.Columns.Add(new DataColumn($"主栅长度检测{i + 1}", typeof(string)));
  483. dt.Columns.Add(new DataColumn("主栅长度检测均值", typeof(string)));
  484. break;
  485. case "Mark点横向间距":
  486. for (int i = 0; i < item.Value; i++)
  487. dt.Columns.Add(new DataColumn($"Mark点横向间距{i + 1}", typeof(string)));
  488. dt.Columns.Add(new DataColumn("Mark点横向间距均值", typeof(string)));
  489. break;
  490. case "Mark点竖向间距":
  491. for (int i = 0; i < item.Value; i++)
  492. dt.Columns.Add(new DataColumn($"Mark点竖向间距{i + 1}", typeof(string)));
  493. dt.Columns.Add(new DataColumn("Mark点竖向间距均值", typeof(string)));
  494. break;
  495. case "鱼叉口长":
  496. for (int i = 0; i < item.Value; i++)
  497. dt.Columns.Add(new DataColumn($"鱼叉口长{i + 1}", typeof(string)));
  498. dt.Columns.Add(new DataColumn("鱼叉口长均值", typeof(string)));
  499. break;
  500. case "鱼叉口宽":
  501. for (int i = 0; i < item.Value; i++)
  502. dt.Columns.Add(new DataColumn($"鱼叉口宽{i + 1}", typeof(string)));
  503. dt.Columns.Add(new DataColumn("鱼叉口宽均值", typeof(string)));
  504. break;
  505. case "鱼叉口间距":
  506. for (int i = 0; i < item.Value; i++)
  507. dt.Columns.Add(new DataColumn($"鱼叉口间距{i + 1}", typeof(string)));
  508. dt.Columns.Add(new DataColumn("鱼叉口间距均值", typeof(string)));
  509. break;
  510. case "蜈蚣角长":
  511. for (int i = 0; i < item.Value; i++)
  512. dt.Columns.Add(new DataColumn($"蜈蚣角长{i + 1}", typeof(string)));
  513. dt.Columns.Add(new DataColumn("蜈蚣角长均值", typeof(string)));
  514. break;
  515. case "蜈蚣角宽":
  516. for (int i = 0; i < item.Value; i++)
  517. dt.Columns.Add(new DataColumn($"蜈蚣角宽{i + 1}", typeof(string)));
  518. dt.Columns.Add(new DataColumn("蜈蚣角宽均值", typeof(string)));
  519. break;
  520. case "分片间隔":
  521. for (int i = 0; i < item.Value; i++)
  522. dt.Columns.Add(new DataColumn($"分片间隔{i + 1}", typeof(string)));
  523. dt.Columns.Add(new DataColumn("分片间隔均值", typeof(string)));
  524. break;
  525. case "焊点长":
  526. for (int i = 0; i < item.Value; i++)
  527. dt.Columns.Add(new DataColumn($"焊点长{i + 1}", typeof(string)));
  528. dt.Columns.Add(new DataColumn("焊点长均值", typeof(string)));
  529. break;
  530. case "焊点宽":
  531. for (int i = 0; i < item.Value; i++)
  532. dt.Columns.Add(new DataColumn($"焊点宽{i + 1}", typeof(string)));
  533. dt.Columns.Add(new DataColumn("焊点宽均值", typeof(string)));
  534. break;
  535. case "焊点间隔":
  536. for (int i = 0; i < item.Value; i++)
  537. dt.Columns.Add(new DataColumn($"焊点间隔{i + 1}", typeof(string)));
  538. dt.Columns.Add(new DataColumn("焊点间隔均值", typeof(string)));
  539. break;
  540. }
  541. #endif
  542. }
  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. dt.Columns.Add(new DataColumn("格栅数量", typeof(int)));//在表中添加int类型的列
  554. dt.Columns.Add(new DataColumn("断栅数量", typeof(int)));//在表中添加int类型的列
  555. dt.Columns.Add(new DataColumn("钢丝断裂数量", typeof(int)));//在表中添加int类型的列
  556. dt.Columns.Add(new DataColumn("残胶堵孔数量", typeof(int)));//在表中添加int类型的列
  557. //插入按钮
  558. dataGridView1.DataSource = dt;
  559. //在datagridview中添加button按钮
  560. //DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
  561. //btn.Name = "Modify";
  562. //btn.HeaderText = "操作";
  563. //btn.DefaultCellStyle.NullValue = "修改";
  564. //dataGridView1.Columns.Add(btn);
  565. //DataGridViewButtonColumn btn2 = new DataGridViewButtonColumn();
  566. //btn2.Name = "HistoryView";
  567. //btn2.HeaderText = "查看";
  568. //btn2.DefaultCellStyle.NullValue = "历史";
  569. //dataGridView1.Columns.Add(btn2);
  570. DataGridViewButtonColumn btn3 = new DataGridViewButtonColumn();
  571. btn3.Name = "Distribution";
  572. btn3.HeaderText = "缺陷分布";
  573. btn3.DefaultCellStyle.NullValue = "分布";
  574. dataGridView1.Columns.Add(btn3);
  575. DataTable dts = (DataTable)dataGridView1.DataSource;
  576. dts.Clear();
  577. List<Point> FailPoint = new List<Point>();
  578. int row_index = 0;
  579. int col_index = 9;
  580. foreach (var item in list)
  581. {
  582. //新增
  583. DataRow dr;//行
  584. dr = dts.NewRow();
  585. //dr["选择"] = false;
  586. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  587. dr["检测单号"] = item.DetectOrder;
  588. dr["产品名称"] = item.ProductInfo.Name;
  589. dr["料号"] = item.ProductInfo.Code;
  590. dr["网版编码"] = item.SN;
  591. dr["批次"] = item.BatchId;
  592. dr["合格"] = item.Qualified ? "合格": "不合格";
  593. //dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  594. //dr["异常情况"] = item.Abnormalities;
  595. //dr["修复人员"] = item.RepairCode;
  596. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  597. //根据不同步骤名称插入数据
  598. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  599. foreach (var tdata in dataCnt)
  600. {
  601. tempd = item.SizeDefectInfoList.Where(q => q.StepName == tdata.Key).ToList();
  602. List<double> dataList = new List<double>();
  603. for (int i = 0; i < tempd.Count; i++)
  604. {
  605. if (tempd[i].isAverage == false)
  606. {
  607. dataList.Add(tempd[i].Data);
  608. dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  609. }
  610. //不合格数据添加队列
  611. if(i + 1 == tempd.Count)
  612. col_index = this.dataGridView1.Columns[$"{tdata.Key}均值"].Index;
  613. else
  614. col_index = this.dataGridView1.Columns[$"{tdata.Key}-{i + 1}"].Index;
  615. if (tempd[i].result == 2)
  616. FailPoint.Add(new Point(row_index, col_index));
  617. }
  618. if (dataList.Count > 0)
  619. dr[$"{tdata.Key}均值"] = dataList.Average().ToString("0.0000");
  620. else
  621. dr[$"{tdata.Key}均值"] = "0";
  622. #if false
  623. switch (tdata.Key)
  624. {
  625. case "Tension":
  626. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Tension").ToList();
  627. for (int i = 0; i < tempd.Count; i++)
  628. dr[$"张力{i + 1}"] = tempd[i].Data.ToString("0.00") ;
  629. dr["张力均值"] = item.TensionValue.ToString("0.00");
  630. break;
  631. case "Height":
  632. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Height").ToList();
  633. for (int i = 0; i < tempd.Count; i++)
  634. dr[$"厚度{i + 1}"] = tempd[i].Data.ToString("0.00");
  635. dr["厚度均值"] = item.HeightValue.ToString("0.00");
  636. break;
  637. case "Y轴方向PT值检测":
  638. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Y轴方向PT值检测").ToList();
  639. for (int i = 0; i < tempd.Count; i++)
  640. dr[$"Y轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  641. dr["Y轴方向PT值均值"] = item.PTValue.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.00");
  647. dr["线宽正面均值"] = item.LineWidthValue.ToString("0.00");
  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.00");
  653. dr["反面检测均值"] = item.FLineWidthValue.ToString("0.00");
  654. break;
  655. case "X轴方向PT值检测":
  656. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "X轴方向PT值检测").ToList();
  657. for (int i = 0; i < tempd.Count; i++)
  658. dr[$"X轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  659. dr["X轴方向PT值均值"] = item.XPTValue.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.MGridIntervalValue.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.MGridWidthValue.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.MGridSpreadValue.ToString("0.0000");
  678. break;
  679. case "细栅间距检测":
  680. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "细栅间距检测").ToList();
  681. for (int i = 0; i < tempd.Count; i++)
  682. dr[$"细栅间距检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  683. dr["细栅间距检测均值"] = item.FGridSpreadValue.ToString("0.0000");
  684. break;
  685. case "背极宽度":
  686. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "背极宽度").ToList();
  687. for (int i = 0; i < tempd.Count; i++)
  688. dr[$"背极宽度值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  689. dr["背极宽度均值"] = item.BackPoleWidthValue.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.MGridLengthValue.ToString("0.0000");
  696. break;
  697. case "Mark点横向间距":
  698. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Mark点横向间距").ToList();
  699. for (int i = 0; i < tempd.Count; i++)
  700. dr[$"Mark点横向间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  701. dr["Mark点横向间距均值"] = item.MarkXDisValue.ToString("0.0000");
  702. break;
  703. case "Mark点竖向间距":
  704. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Mark点竖向间距").ToList();
  705. for (int i = 0; i < tempd.Count; i++)
  706. dr[$"Mark点竖向间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  707. dr["Mark点竖向间距均值"] = item.MarkYDisValue.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.ForkLengthValue.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.ForkWidthValue.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.ForkDisValue.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.ChilopodLengthValue.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.ChilopodWidthValue.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.MarkYDisValue.ToString("0.0000");
  744. break;
  745. case "焊点长":
  746. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "焊点长").ToList();
  747. for (int i = 0; i < tempd.Count; i++)
  748. dr[$"焊点长{i + 1}"] = tempd[i].Data.ToString("0.0000");
  749. dr["焊点长均值"] = item.ForkLengthValue.ToString("0.0000");
  750. break;
  751. case "焊点宽":
  752. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "焊点宽").ToList();
  753. for (int i = 0; i < tempd.Count; i++)
  754. dr[$"焊点宽{i + 1}"] = tempd[i].Data.ToString("0.0000");
  755. dr["焊点宽均值"] = item.ForkWidthValue.ToString("0.0000");
  756. break;
  757. case "焊点间隔":
  758. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "焊点间隔").ToList();
  759. for (int i = 0; i < tempd.Count; i++)
  760. dr[$"焊点间隔{i + 1}"] = tempd[i].Data.ToString("0.0000");
  761. dr["焊点间隔均值"] = item.ForkDisValue.ToString("0.0000");
  762. break;
  763. }
  764. #endif
  765. }
  766. dr["堵孔数量"] = item.DKCount;
  767. dr["脏污数量"] = item.ZWCount;
  768. dr["钢丝异常数量"] = item.GSYCCount;
  769. dr["纤维丝数量"] = item.XWSCount;
  770. dr["缺口数量"] = item.QKCount;
  771. dr["针孔数量"] = item.ZKCount;
  772. dr["泡泡数量"] = item.PPCount ;
  773. dr["划伤数量"] = item.HSCount;
  774. dr["压线数量"] = item.YXCount;
  775. dr["斜边数量"] = item.XBCount;
  776. dr["格栅数量"] = item.SXCount;
  777. dr["断栅数量"] = item.DSCount;
  778. dr["钢丝断裂数量"] = item.GSDLCount;
  779. dr["残胶堵孔数量"] = item.CJDKCount;
  780. dts.Rows.Add(dr);//在表的对象的行里添加此行
  781. row_index++;
  782. }
  783. //dts.DefaultView.Sort = "时间戳 desc";
  784. //dts = dts.DefaultView.ToTable();
  785. dataGridView1.DataSource = dts;
  786. this.dataGridView1.Columns[0].Width = 50;
  787. this.dataGridView1.Columns[1].Width = 120;
  788. for (int i = 0; i < 9; i++) //去除3列
  789. {
  790. this.dataGridView1.Columns[i].Frozen = true;
  791. }
  792. for (int i = 0; i < FailPoint.Count; i++)
  793. {
  794. DataGridViewCell aa = dataGridView1.Rows[FailPoint[i].X].Cells[FailPoint[i].Y];
  795. aa.Style.ForeColor = Color.Red;
  796. //aa.Style.BackColor = Color.LightGreen;
  797. }
  798. return;
  799. }
  800. #endregion
  801. private void QueryData()
  802. {
  803. QueryOrderData queryOrderData = new QueryOrderData();
  804. queryOrderData.model = "order";
  805. queryOrderData.fields = "*";
  806. queryOrderData.order = "id desc";
  807. queryOrderData.pageNum = this.pageCtrl1.PageIndex;
  808. queryOrderData.pageSize = this.pageCtrl1.PageSize;
  809. queryOrderData.domain = new List<domainItem>();
  810. domainItem startTime = new domainItem();
  811. startTime.FieldName = "CreateTime";
  812. startTime.FieldValue = dateTimePicker1.Value.ToString("yyyy-M-d");
  813. startTime.ConditionalType = 3;
  814. queryOrderData.domain.Add(startTime);
  815. domainItem endTime = new domainItem();
  816. endTime.FieldName = "CreateTime";
  817. endTime.FieldValue = dateTimePicker2.Value.ToString("yyyy-M-d") + " 23:59:59";
  818. endTime.ConditionalType = 5;
  819. queryOrderData.domain.Add(endTime);
  820. //OrderService.GetList
  821. //产品条件
  822. if (!string.IsNullOrEmpty(cbProductCode.Text))
  823. {
  824. domainItem ProductCode = new domainItem();
  825. ProductCode.FieldName = "ProductId";
  826. ProductCode.FieldValue = SysMgr.Instance.ProductIdList[cbProductCode.SelectedIndex].ToString();
  827. ProductCode.ConditionalType = 6;
  828. queryOrderData.domain.Add(ProductCode);
  829. }
  830. //合格条件
  831. if (!string.IsNullOrEmpty(comboBox2.Text))
  832. {
  833. domainItem CompareResult = new domainItem();
  834. CompareResult.FieldName = "Qualified";
  835. CompareResult.FieldValue = comboBox2.Text == "合格"? "1":"0";
  836. CompareResult.ConditionalType = 0;
  837. queryOrderData.domain.Add(CompareResult);
  838. }
  839. //比对条件
  840. if (!string.IsNullOrEmpty(comboBox1.Text))
  841. {
  842. domainItem CompareResultOptions = new domainItem();
  843. CompareResultOptions.FieldName = "CompareResult";
  844. CompareResultOptions.FieldValue = comboBox1.Text == "通过" ? "1" : comboBox1.Text == "未通过" ? "2" : "0";
  845. CompareResultOptions.ConditionalType = 0;
  846. queryOrderData.domain.Add(CompareResultOptions);
  847. }
  848. //异常条件
  849. if (!string.IsNullOrEmpty(comboBox3.Text))
  850. {
  851. domainItem State = new domainItem();
  852. State.FieldName = "State";
  853. State.FieldValue = comboBox3.Text == "修复" ? "5" : comboBox3.Text == "未修复" ? "0" : "10";
  854. State.ConditionalType = 0;
  855. queryOrderData.domain.Add(State);
  856. }
  857. int totalcnt = 0;
  858. JObject str = JObject.Parse(JsonConvert.SerializeObject(queryOrderData));
  859. var list = getTableList(str, out totalcnt);
  860. this.pageCtrl1.DrawControl(totalcnt);
  861. QueryOrders = list;
  862. //自动生成表格
  863. ShowDataTableEx(list);
  864. //总数居
  865. queryOrderData.pageNum = 0;
  866. queryOrderData.pageSize = 0;
  867. JObject str2 = JObject.Parse(JsonConvert.SerializeObject(queryOrderData));
  868. var list2 = getTableList(str2, out totalcnt);
  869. QueryAllOrders = list2;
  870. }
  871. private void skinButton2_Click(object sender, EventArgs e)
  872. {
  873. pageCtrl1.PageIndex = 1;
  874. QueryData();
  875. }
  876. #endregion
  877. #region 表格单击
  878. #region 更新数据
  879. #endregion
  880. private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
  881. {
  882. int Index = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引
  883. if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "操作")
  884. {
  885. //修改数据
  886. AmendantRecordFrm recordFrm = new AmendantRecordFrm(QueryOrders[Index]);
  887. recordFrm.ShowDialog();
  888. //重新显示
  889. QueryData();
  890. }
  891. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "查看")
  892. {
  893. //查看历史
  894. HistoryViewFrm Frm = new HistoryViewFrm(QueryOrders[Index]);
  895. Frm.ShowDialog();
  896. }
  897. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "缺陷分布")
  898. {
  899. //缺陷分布
  900. DistributionFrm Frm = new DistributionFrm(QueryOrders[Index]);
  901. Frm.WindowState = FormWindowState.Maximized;
  902. Frm.ShowDialog();
  903. }
  904. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "选择")
  905. {
  906. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[Index].Cells[0];
  907. Boolean flag = Convert.ToBoolean(checkCell.Value);
  908. if (flag == true) //查找被选择的数据行
  909. {
  910. checkCell.Value = false;
  911. }
  912. else
  913. checkCell.Value = true;
  914. }
  915. }
  916. #endregion
  917. #region 界面调整
  918. private void DataQueryFrm_SizeChanged(object sender, EventArgs e)
  919. {
  920. if (this.WindowState == FormWindowState.Maximized)
  921. {
  922. this.WindowState = FormWindowState.Normal;
  923. this.Top = 0;
  924. this.Left = 0;
  925. this.Width = SystemInformation.WorkingArea.Width;
  926. this.Height = SystemInformation.WorkingArea.Height;
  927. }
  928. }
  929. #endregion
  930. #region 删除
  931. private int delTableList(JObject req)
  932. {
  933. JObject res = new JObject();
  934. try
  935. {
  936. string model = req.Value<string>("model");
  937. string domain = req.Value<JArray>("domain").ToString();
  938. //var idArr = req.Value<JArray>("idList");
  939. //List<int> ids = new List<int>();
  940. //foreach (int id in idArr) ids.Add(id);
  941. int result = OrderService.DeleteList(model, domain);
  942. return 1;
  943. }
  944. catch (Exception ex)
  945. {
  946. }
  947. return 0;
  948. }
  949. private void skinButton3_Click(object sender, EventArgs e)
  950. {
  951. for (int i = 0; i < dataGridView1.Rows.Count; i++)
  952. {
  953. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells[0];
  954. Boolean flag = Convert.ToBoolean(checkCell.Value);
  955. if(flag == true)
  956. {
  957. QueryOrderData delOrderData = new QueryOrderData();
  958. delOrderData.model = "order";
  959. delOrderData.domain = new List<domainItem>();
  960. domainItem doitem = new domainItem();
  961. doitem.FieldName = "Id";
  962. doitem.FieldValue = QueryOrders[i].Id.ToString();
  963. doitem.ConditionalType = 6;
  964. delOrderData.domain.Add(doitem);
  965. JObject str = JObject.Parse(JsonConvert.SerializeObject(delOrderData));
  966. int ret = delTableList(str);
  967. if (ret == 1)
  968. {
  969. //删除历史
  970. QueryOrderData HistoryOrderData = new QueryOrderData();
  971. HistoryOrderData.model = "OrderHistory";
  972. HistoryOrderData.domain = new List<domainItem>();
  973. domainItem doitem2 = new domainItem();
  974. doitem2.FieldName = "Pid";
  975. doitem2.FieldValue = QueryOrders[i].Id.ToString();
  976. doitem2.ConditionalType = 6;
  977. HistoryOrderData.domain.Add(doitem2);
  978. JObject str2 = JObject.Parse(JsonConvert.SerializeObject(HistoryOrderData));
  979. delTableList(str2);
  980. }
  981. }
  982. }
  983. //重新显示
  984. QueryData();
  985. }
  986. #endregion
  987. #region Excel导出
  988. private DataTable GetExcelTabel(out List<Point> points)
  989. {
  990. points = new List<Point>();
  991. //记录数据类型列数
  992. Dictionary<string, int> dataCnt = new Dictionary<string, int>();
  993. DataTable dt = new DataTable(); //建立个数据表
  994. //通用列
  995. dt.Columns.Add(new DataColumn("检验日期", typeof(string)));//在表中添加string类型的列
  996. dt.Columns.Add(new DataColumn("检测单号", typeof(string)));//在表中添加string类型的列
  997. dt.Columns.Add(new DataColumn("产品名称", typeof(string)));//在表中添加string类型的列
  998. dt.Columns.Add(new DataColumn("料号", typeof(string)));//在表中添加string类型的列
  999. dt.Columns.Add(new DataColumn("网版编码", typeof(string)));//在表中添加string类型的列
  1000. dt.Columns.Add(new DataColumn("批次", typeof(string)));//在表中添加string类型的列
  1001. dt.Columns.Add(new DataColumn("合格", typeof(string)));//在表中添加string类型的列
  1002. //dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列
  1003. //dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列
  1004. //dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列
  1005. dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列
  1006. foreach (var item in QueryAllOrders)
  1007. {
  1008. //老流程
  1009. if (item.StepInfo == null || item.StepInfo.ProcessType != "快速流程")
  1010. {
  1011. //加入数据表
  1012. if (item.SizeDefectInfoList == null)
  1013. item.SizeDefectInfoList = new List<SizeDefectInfo>();
  1014. #region 张力
  1015. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1016. {
  1017. PointCode = "Tension",
  1018. StepName = "张力",
  1019. Data = item.Tension1,
  1020. });
  1021. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1022. {
  1023. PointCode = "Tension",
  1024. StepName = "张力",
  1025. Data = item.Tension2,
  1026. });
  1027. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1028. {
  1029. PointCode = "Tension",
  1030. StepName = "张力",
  1031. Data = item.Tension3,
  1032. });
  1033. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1034. {
  1035. PointCode = "Tension",
  1036. StepName = "张力",
  1037. Data = item.Tension4,
  1038. });
  1039. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1040. {
  1041. PointCode = "Tension",
  1042. StepName = "张力",
  1043. Data = item.Tension5,
  1044. });
  1045. #endregion
  1046. #region 厚度
  1047. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1048. {
  1049. PointCode = "Height",
  1050. StepName = "厚度",
  1051. Data = item.Height1,
  1052. });
  1053. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1054. {
  1055. PointCode = "Height",
  1056. StepName = "厚度",
  1057. Data = item.Height2,
  1058. });
  1059. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1060. {
  1061. PointCode = "Height",
  1062. StepName = "厚度",
  1063. Data = item.Height3,
  1064. });
  1065. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1066. {
  1067. PointCode = "Height",
  1068. StepName = "厚度",
  1069. Data = item.Height4,
  1070. });
  1071. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1072. {
  1073. PointCode = "Height",
  1074. StepName = "厚度",
  1075. Data = item.Height5,
  1076. });
  1077. #endregion
  1078. #region YPT
  1079. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1080. {
  1081. PointCode = "Y轴方向PT值检测",
  1082. StepName = "Y轴方向PT值",
  1083. Data = item.PT1,
  1084. });
  1085. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1086. {
  1087. PointCode = "Y轴方向PT值检测",
  1088. StepName = "Y轴方向PT值",
  1089. Data = item.PT2,
  1090. });
  1091. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1092. {
  1093. PointCode = "Y轴方向PT值检测",
  1094. StepName = "Y轴方向PT值",
  1095. Data = item.PT3,
  1096. });
  1097. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1098. {
  1099. PointCode = "Y轴方向PT值检测",
  1100. StepName = "Y轴方向PT值",
  1101. Data = item.PT5,
  1102. });
  1103. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1104. {
  1105. PointCode = "Y轴方向PT值检测",
  1106. StepName = "Y轴方向PT值",
  1107. Data = item.PT6,
  1108. });
  1109. #endregion
  1110. #region 线宽
  1111. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1112. {
  1113. PointCode = "线宽正面",
  1114. StepName = "线宽",
  1115. Data = item.LineWidth1,
  1116. });
  1117. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1118. {
  1119. PointCode = "线宽正面",
  1120. StepName = "线宽",
  1121. Data = item.LineWidth2,
  1122. });
  1123. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1124. {
  1125. PointCode = "线宽正面",
  1126. StepName = "线宽",
  1127. Data = item.LineWidth3,
  1128. });
  1129. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1130. {
  1131. PointCode = "线宽正面",
  1132. StepName = "线宽",
  1133. Data = item.LineWidth4,
  1134. });
  1135. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1136. {
  1137. PointCode = "线宽正面",
  1138. StepName = "线宽",
  1139. Data = item.LineWidth5,
  1140. });
  1141. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1142. {
  1143. PointCode = "线宽正面",
  1144. StepName = "线宽",
  1145. Data = item.LineWidth6,
  1146. });
  1147. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1148. {
  1149. PointCode = "线宽正面",
  1150. StepName = "线宽",
  1151. Data = item.LineWidth7,
  1152. });
  1153. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1154. {
  1155. PointCode = "线宽正面",
  1156. StepName = "线宽",
  1157. Data = item.LineWidth8,
  1158. });
  1159. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1160. {
  1161. PointCode = "线宽正面",
  1162. StepName = "线宽",
  1163. Data = item.LineWidth9,
  1164. });
  1165. #endregion
  1166. if (!dataCnt.ContainsKey("张力"))
  1167. dataCnt.Add("张力", 5);
  1168. else
  1169. if (dataCnt["张力"] < 5)
  1170. dataCnt["张力"] = 5;
  1171. if (!dataCnt.ContainsKey("厚度"))
  1172. dataCnt.Add("厚度", 5);
  1173. else
  1174. if (dataCnt["厚度"] < 5)
  1175. dataCnt["厚度"] = 5;
  1176. if (!dataCnt.ContainsKey("Y轴方向PT值检测"))
  1177. dataCnt.Add("Y轴方向PT值检测", 5);
  1178. else
  1179. if (dataCnt["Y轴方向PT值检测"] < 5)
  1180. dataCnt["Y轴方向PT值检测"] = 5;
  1181. if (!dataCnt.ContainsKey("线宽正面"))
  1182. dataCnt.Add("线宽正面", 9);
  1183. else
  1184. if (dataCnt["线宽正面"] < 9)
  1185. dataCnt["线宽正面"] = 9;
  1186. }
  1187. else
  1188. {
  1189. //按照步骤流程分类
  1190. string[] pointType = item.SizeDefectInfoList.Select(t => t.StepName).Distinct().ToList().ToArray();
  1191. for (int i = 0; i < pointType.Length; i++)
  1192. {
  1193. List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.StepName == pointType[i] && !q.isAverage).ToList();
  1194. if (t.Count > 0)
  1195. {
  1196. //当前测试项数据个数
  1197. if (!dataCnt.ContainsKey(pointType[i]))
  1198. dataCnt.Add(pointType[i], t.Count);
  1199. else
  1200. if (dataCnt[pointType[i]] < t.Count)
  1201. dataCnt[pointType[i]] = t.Count;
  1202. }
  1203. }
  1204. }
  1205. }
  1206. //插入列
  1207. foreach (var item in dataCnt)
  1208. {
  1209. //按步骤名称插入列
  1210. for (int i = 0; i < item.Value; i++)
  1211. dt.Columns.Add(new DataColumn($"{item.Key}-{i + 1}", typeof(string)));
  1212. dt.Columns.Add(new DataColumn($"{item.Key}均值", typeof(string)));
  1213. }
  1214. dt.Columns.Add(new DataColumn("堵孔数量", typeof(int)));//在表中添加int类型的列
  1215. dt.Columns.Add(new DataColumn("脏污数量", typeof(int)));//在表中添加int类型的列
  1216. dt.Columns.Add(new DataColumn("钢丝异常数量", typeof(int)));//在表中添加int类型的列
  1217. dt.Columns.Add(new DataColumn("纤维丝数量", typeof(int)));//在表中添加int类型的列
  1218. dt.Columns.Add(new DataColumn("缺口数量", typeof(int)));//在表中添加int类型的列
  1219. dt.Columns.Add(new DataColumn("针孔数量", typeof(int)));//在表中添加int类型的列
  1220. dt.Columns.Add(new DataColumn("泡泡数量", typeof(int)));//在表中添加int类型的列
  1221. dt.Columns.Add(new DataColumn("划伤数量", typeof(int)));//在表中添加int类型的列
  1222. dt.Columns.Add(new DataColumn("压线数量", typeof(int)));//在表中添加int类型的列
  1223. dt.Columns.Add(new DataColumn("斜边数量", typeof(int)));//在表中添加int类型的列
  1224. dt.Columns.Add(new DataColumn("栅线数量", typeof(int)));//在表中添加int类型的列
  1225. dt.Columns.Add(new DataColumn("断栅数量", typeof(int)));//在表中添加int类型的列
  1226. dt.Columns.Add(new DataColumn("钢丝断裂数量", typeof(int)));//在表中添加int类型的列
  1227. dt.Columns.Add(new DataColumn("残胶堵孔数量", typeof(int)));//在表中添加int类型的列
  1228. int row_index = 0;
  1229. foreach (var item in QueryAllOrders)
  1230. {
  1231. //新增
  1232. DataRow dr;//行
  1233. dr = dt.NewRow();
  1234. //dr["选择"] = false;
  1235. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  1236. dr["检测单号"] = item.DetectOrder;
  1237. dr["产品名称"] = item.ProductInfo.Name;
  1238. dr["料号"] = item.ProductInfo.Code;
  1239. dr["网版编码"] = item.SN;
  1240. dr["批次"] = item.BatchId;
  1241. dr["合格"] = item.Qualified ? "合格" : "不合格";
  1242. //dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  1243. //dr["异常情况"] = item.Abnormalities;
  1244. //dr["修复人员"] = item.RepairCode;
  1245. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  1246. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  1247. foreach (var tdata in dataCnt)
  1248. {
  1249. tempd = item.SizeDefectInfoList.Where(q => q.StepName == tdata.Key).ToList();
  1250. List<double> dataList = new List<double>();
  1251. //for (int i = 0; i < tempd.Count; i++)
  1252. // dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1253. //dr[$"{tdata.Key}均值"] = item.TensionValue.ToString("0.0000");
  1254. for (int i = 0; i < tempd.Count; i++)
  1255. {
  1256. int col_index = 0;
  1257. if (!tempd[i].isAverage)
  1258. {
  1259. dataList.Add(tempd[i].Data);
  1260. dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1261. col_index = dr.Table.Columns.IndexOf($"{tdata.Key}-{i + 1}");
  1262. }
  1263. else
  1264. col_index = dr.Table.Columns.IndexOf($"{tdata.Key}均值");
  1265. if (tempd[i].result == 2)
  1266. points.Add(new Point(row_index, col_index));
  1267. }
  1268. if (dataList.Count > 0)
  1269. dr[$"{tdata.Key}均值"] = dataList.Average().ToString("0.0000");
  1270. else
  1271. dr[$"{tdata.Key}均值"] = "0";
  1272. }
  1273. dr["堵孔数量"] = item.DKCount;
  1274. dr["脏污数量"] = item.ZWCount;
  1275. dr["钢丝异常数量"] = item.GSYCCount;
  1276. dr["纤维丝数量"] = item.XWSCount;
  1277. dr["缺口数量"] = item.QKCount;
  1278. dr["针孔数量"] = item.ZKCount;
  1279. dr["泡泡数量"] = item.PPCount;
  1280. dr["划伤数量"] = item.HSCount;
  1281. dr["压线数量"] = item.YXCount;
  1282. dr["斜边数量"] = item.XBCount;
  1283. dr["栅线数量"] = item.SXCount;
  1284. dr["断栅数量"] = item.DSCount;
  1285. dr["钢丝断裂数量"] = item.GSDLCount;
  1286. dr["残胶堵孔数量"] = item.CJDKCount;
  1287. dt.Rows.Add(dr);//在表的对象的行里添加此行
  1288. row_index++;
  1289. }
  1290. return dt;
  1291. }
  1292. #region excel导出
  1293. public Excel.Application m_xlApp = null;
  1294. public void OutputAsExcelFile(DataTable dtTable, String filePath, List<Point> points)
  1295. {
  1296. //string filePath = "";
  1297. //SaveFileDialog s = new SaveFileDialog();
  1298. //s.Title = "保存Excel文件";
  1299. //s.Filter = "Excel文件(*.xls)|*.xls";
  1300. //s.FilterIndex = 1;
  1301. //if (s.ShowDialog() == DialogResult.OK)
  1302. // filePath = s.FileName;
  1303. //else
  1304. // return;
  1305. //导出dataTable到Excel
  1306. long rowNum = dtTable.Rows.Count;//行数
  1307. int columnNum = dtTable.Columns.Count;//列数
  1308. Excel.Application m_xlApp = new Excel.Application();
  1309. m_xlApp.DisplayAlerts = false;//不显示更改提示
  1310. m_xlApp.Visible = false;
  1311. Excel.Workbooks workbooks = m_xlApp.Workbooks;
  1312. Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
  1313. Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
  1314. try
  1315. {
  1316. string[,] datas = new string[rowNum + 1, columnNum];
  1317. for (int i = 0; i < columnNum; i++) //写入字段
  1318. datas[0, i] = dtTable.Columns[i].Caption; //写入列标
  1319. //Excel.Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, columnNum]);
  1320. Excel.Range range = m_xlApp.Range[worksheet.Cells[1, 1], worksheet.Cells[1, columnNum]];
  1321. range.Interior.ColorIndex = 15;//15代表灰色
  1322. range.Font.Bold = true;
  1323. range.Font.Size = 10;
  1324. int r = 0;
  1325. for (r = 0; r < rowNum; r++)
  1326. {
  1327. for (int i = 0; i < columnNum; i++)
  1328. {
  1329. object obj;
  1330. obj = dtTable.Rows[r][dtTable.Columns[i].ToString()];
  1331. datas[r + 1, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式
  1332. //Console.WriteLine(datas[r + 1, i]);
  1333. }
  1334. System.Windows.Forms.Application.DoEvents();
  1335. //添加进度条
  1336. }
  1337. //Excel.Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]);
  1338. Excel.Range fchR = m_xlApp.Range[worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]];
  1339. fchR.Value2 = datas;
  1340. worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。
  1341. //worksheet.Name = "dd";
  1342. //m_xlApp.WindowState = Excel.XlWindowState.xlMaximized;
  1343. m_xlApp.Visible = false;
  1344. // = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]);
  1345. range = m_xlApp.Range[worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]];
  1346. for (int i = 0; i < points.Count; i++)
  1347. {
  1348. Excel.Range Errrange = m_xlApp.Range[worksheet.Cells[points[i].X + 2, points[i].Y + 1], worksheet.Cells[points[i].X + 2, points[i].Y + 1]];
  1349. Errrange.Font.ColorIndex = 3;//3红色
  1350. }
  1351. //range.Interior.ColorIndex = 15;//15代表灰色
  1352. range.Font.Size = 9;
  1353. range.RowHeight = 14.25;
  1354. range.Borders.LineStyle = 1;
  1355. range.HorizontalAlignment = 1;
  1356. workbook.Saved = true;
  1357. workbook.SaveCopyAs(filePath);
  1358. }
  1359. catch (Exception ex)
  1360. {
  1361. MessageBox.Show("导出异常:" + ex.Message, "导出异常", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  1362. }
  1363. finally
  1364. {
  1365. EndReport();
  1366. }
  1367. m_xlApp.Workbooks.Close();
  1368. m_xlApp.Workbooks.Application.Quit();
  1369. m_xlApp.Application.Quit();
  1370. m_xlApp.Quit();
  1371. //MessageBox.Show("导出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  1372. }
  1373. private void EndReport()
  1374. {
  1375. object missing = System.Reflection.Missing.Value;
  1376. try
  1377. { }
  1378. catch { }
  1379. finally
  1380. {
  1381. try
  1382. {
  1383. //System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Workbooks);
  1384. //System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Application);
  1385. //System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp);
  1386. //m_xlApp = null;
  1387. }
  1388. catch { }
  1389. try
  1390. {
  1391. //清理垃圾进程
  1392. this.killProcessThread();
  1393. }
  1394. catch { }
  1395. GC.Collect();
  1396. }
  1397. }
  1398. private void killProcessThread()
  1399. {
  1400. ArrayList myProcess = new ArrayList();
  1401. for (int i = 0; i < myProcess.Count; i++)
  1402. {
  1403. try
  1404. {
  1405. System.Diagnostics.Process.GetProcessById(int.Parse((string)myProcess[i])).Kill();
  1406. }
  1407. catch { }
  1408. }
  1409. }
  1410. #endregion
  1411. private void ShowAllDataTableEx(string filePath)
  1412. {
  1413. //记录数据类型列数
  1414. Dictionary<string, int> dataCnt = new Dictionary<string, int>();
  1415. DataTable dt = new DataTable(); //建立个数据表
  1416. //通用列
  1417. dt.Columns.Add(new DataColumn("检验日期", typeof(string)));//在表中添加string类型的列
  1418. dt.Columns.Add(new DataColumn("检测单号", typeof(string)));//在表中添加string类型的列
  1419. dt.Columns.Add(new DataColumn("产品名称", typeof(string)));//在表中添加string类型的列
  1420. dt.Columns.Add(new DataColumn("料号", typeof(string)));//在表中添加string类型的列
  1421. dt.Columns.Add(new DataColumn("网版编码", typeof(string)));//在表中添加string类型的列
  1422. dt.Columns.Add(new DataColumn("批次", typeof(string)));//在表中添加string类型的列
  1423. dt.Columns.Add(new DataColumn("合格", typeof(string)));//在表中添加string类型的列
  1424. //dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列
  1425. //dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列
  1426. //dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列
  1427. dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列
  1428. foreach (var item in QueryAllOrders)
  1429. {
  1430. //老流程
  1431. if (item.StepInfo == null || item.StepInfo.ProcessType != "快速流程")
  1432. {
  1433. //加入数据表
  1434. if (item.SizeDefectInfoList == null)
  1435. item.SizeDefectInfoList = new List<SizeDefectInfo>();
  1436. #region 张力
  1437. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1438. {
  1439. PointCode = "Tension",
  1440. StepName = "张力",
  1441. Data = item.Tension1,
  1442. });
  1443. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1444. {
  1445. PointCode = "Tension",
  1446. StepName = "张力",
  1447. Data = item.Tension2,
  1448. });
  1449. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1450. {
  1451. PointCode = "Tension",
  1452. StepName = "张力",
  1453. Data = item.Tension3,
  1454. });
  1455. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1456. {
  1457. PointCode = "Tension",
  1458. StepName = "张力",
  1459. Data = item.Tension4,
  1460. });
  1461. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1462. {
  1463. PointCode = "Tension",
  1464. StepName = "张力",
  1465. Data = item.Tension5,
  1466. });
  1467. #endregion
  1468. #region 厚度
  1469. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1470. {
  1471. PointCode = "Height",
  1472. StepName = "厚度",
  1473. Data = item.Height1,
  1474. });
  1475. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1476. {
  1477. PointCode = "Height",
  1478. StepName = "厚度",
  1479. Data = item.Height2,
  1480. });
  1481. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1482. {
  1483. PointCode = "Height",
  1484. StepName = "厚度",
  1485. Data = item.Height3,
  1486. });
  1487. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1488. {
  1489. PointCode = "Height",
  1490. StepName = "厚度",
  1491. Data = item.Height4,
  1492. });
  1493. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1494. {
  1495. PointCode = "Height",
  1496. StepName = "厚度",
  1497. Data = item.Height5,
  1498. });
  1499. #endregion
  1500. #region YPT
  1501. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1502. {
  1503. PointCode = "Y轴方向PT值检测",
  1504. StepName = "Y轴方向PT值",
  1505. Data = item.PT1,
  1506. });
  1507. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1508. {
  1509. PointCode = "Y轴方向PT值检测",
  1510. StepName = "Y轴方向PT值",
  1511. Data = item.PT2,
  1512. });
  1513. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1514. {
  1515. PointCode = "Y轴方向PT值检测",
  1516. StepName = "Y轴方向PT值",
  1517. Data = item.PT3,
  1518. });
  1519. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1520. {
  1521. PointCode = "Y轴方向PT值检测",
  1522. StepName = "Y轴方向PT值",
  1523. Data = item.PT5,
  1524. });
  1525. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1526. {
  1527. PointCode = "Y轴方向PT值检测",
  1528. StepName = "Y轴方向PT值",
  1529. Data = item.PT6,
  1530. });
  1531. #endregion
  1532. #region 线宽
  1533. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1534. {
  1535. PointCode = "线宽正面",
  1536. StepName = "线宽",
  1537. Data = item.LineWidth1,
  1538. });
  1539. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1540. {
  1541. PointCode = "线宽正面",
  1542. StepName = "线宽",
  1543. Data = item.LineWidth2,
  1544. });
  1545. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1546. {
  1547. PointCode = "线宽正面",
  1548. StepName = "线宽",
  1549. Data = item.LineWidth3,
  1550. });
  1551. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1552. {
  1553. PointCode = "线宽正面",
  1554. StepName = "线宽",
  1555. Data = item.LineWidth4,
  1556. });
  1557. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1558. {
  1559. PointCode = "线宽正面",
  1560. StepName = "线宽",
  1561. Data = item.LineWidth5,
  1562. });
  1563. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1564. {
  1565. PointCode = "线宽正面",
  1566. StepName = "线宽",
  1567. Data = item.LineWidth6,
  1568. });
  1569. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1570. {
  1571. PointCode = "线宽正面",
  1572. StepName = "线宽",
  1573. Data = item.LineWidth7,
  1574. });
  1575. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1576. {
  1577. PointCode = "线宽正面",
  1578. StepName = "线宽",
  1579. Data = item.LineWidth8,
  1580. });
  1581. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1582. {
  1583. PointCode = "线宽正面",
  1584. StepName = "线宽",
  1585. Data = item.LineWidth9,
  1586. });
  1587. #endregion
  1588. if (!dataCnt.ContainsKey("张力"))
  1589. dataCnt.Add("张力", 5);
  1590. else
  1591. if (dataCnt["张力"] < 5)
  1592. dataCnt["张力"] = 5;
  1593. if (!dataCnt.ContainsKey("厚度"))
  1594. dataCnt.Add("厚度", 5);
  1595. else
  1596. if (dataCnt["厚度"] < 5)
  1597. dataCnt["厚度"] = 5;
  1598. if (!dataCnt.ContainsKey("Y轴方向PT值检测"))
  1599. dataCnt.Add("Y轴方向PT值检测", 5);
  1600. else
  1601. if (dataCnt["Y轴方向PT值检测"] < 5)
  1602. dataCnt["Y轴方向PT值检测"] = 5;
  1603. if (!dataCnt.ContainsKey("线宽正面"))
  1604. dataCnt.Add("线宽正面", 9);
  1605. else
  1606. if (dataCnt["线宽正面"] < 9)
  1607. dataCnt["线宽正面"] = 9;
  1608. }
  1609. else
  1610. {
  1611. //按照步骤流程分类
  1612. string[] pointType = item.SizeDefectInfoList.Select(t => t.StepName).Distinct().ToList().ToArray();
  1613. for (int i = 0; i < pointType.Length; i++)
  1614. {
  1615. List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.StepName == pointType[i]).ToList();
  1616. if (t.Count > 0)
  1617. {
  1618. //当前测试项数据个数
  1619. if (!dataCnt.ContainsKey(pointType[i]))
  1620. dataCnt.Add(pointType[i], t.Count);
  1621. else
  1622. if (dataCnt[pointType[i]] < t.Count)
  1623. dataCnt[pointType[i]] = t.Count;
  1624. }
  1625. }
  1626. }
  1627. }
  1628. //插入列
  1629. foreach (var item in dataCnt)
  1630. {
  1631. //按步骤名称插入列
  1632. for (int i = 0; i < item.Value; i++)
  1633. dt.Columns.Add(new DataColumn($"{item.Key}-{i + 1}", typeof(string)));
  1634. dt.Columns.Add(new DataColumn($"{item.Key}均值", typeof(string)));
  1635. }
  1636. dt.Columns.Add(new DataColumn("堵孔数量", typeof(int)));//在表中添加int类型的列
  1637. dt.Columns.Add(new DataColumn("脏污数量", typeof(int)));//在表中添加int类型的列
  1638. dt.Columns.Add(new DataColumn("钢丝异常数量", typeof(int)));//在表中添加int类型的列
  1639. dt.Columns.Add(new DataColumn("纤维丝数量", typeof(int)));//在表中添加int类型的列
  1640. dt.Columns.Add(new DataColumn("缺口数量", typeof(int)));//在表中添加int类型的列
  1641. dt.Columns.Add(new DataColumn("针孔数量", typeof(int)));//在表中添加int类型的列
  1642. dt.Columns.Add(new DataColumn("泡泡数量", typeof(int)));//在表中添加int类型的列
  1643. dt.Columns.Add(new DataColumn("划伤数量", typeof(int)));//在表中添加int类型的列
  1644. dt.Columns.Add(new DataColumn("压线数量", typeof(int)));//在表中添加int类型的列
  1645. dt.Columns.Add(new DataColumn("斜边数量", typeof(int)));//在表中添加int类型的列
  1646. dt.Columns.Add(new DataColumn("格栅数量", typeof(int)));//在表中添加int类型的列
  1647. dt.Columns.Add(new DataColumn("断栅数量", typeof(int)));//在表中添加int类型的列
  1648. dt.Columns.Add(new DataColumn("钢丝断裂数量", typeof(int)));//在表中添加int类型的列
  1649. dt.Columns.Add(new DataColumn("残胶堵孔数量", typeof(int)));//在表中添加int类型的列
  1650. foreach (var item in QueryAllOrders)
  1651. {
  1652. //新增
  1653. DataRow dr;//行
  1654. dr = dt.NewRow();
  1655. //dr["选择"] = false;
  1656. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  1657. dr["检测单号"] = item.DetectOrder;
  1658. dr["产品名称"] = item.ProductInfo.Name;
  1659. dr["料号"] = item.ProductInfo.Code;
  1660. dr["网版编码"] = item.SN;
  1661. dr["批次"] = item.BatchId;
  1662. dr["合格"] = item.Qualified ? "合格" : "不合格";
  1663. //dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  1664. //dr["异常情况"] = item.Abnormalities;
  1665. //dr["修复人员"] = item.RepairCode;
  1666. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  1667. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  1668. foreach (var tdata in dataCnt)
  1669. {
  1670. tempd = item.SizeDefectInfoList.Where(q => q.StepName == tdata.Key).ToList();
  1671. List<double> dataList = new List<double>();
  1672. //for (int i = 0; i < tempd.Count; i++)
  1673. // dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1674. //dr[$"{tdata.Key}均值"] = item.TensionValue.ToString("0.0000");
  1675. for (int i = 0; i < tempd.Count; i++)
  1676. {
  1677. dataList.Add(tempd[i].Data);
  1678. dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1679. }
  1680. if (dataList.Count > 0)
  1681. dr[$"{tdata.Key}均值"] = dataList.Average().ToString("0.0000");
  1682. else
  1683. dr[$"{tdata.Key}均值"] = "0";
  1684. }
  1685. dr["堵孔数量"] = item.DKCount;
  1686. dr["脏污数量"] = item.ZWCount;
  1687. dr["钢丝异常数量"] = item.GSYCCount;
  1688. dr["纤维丝数量"] = item.XWSCount;
  1689. dr["缺口数量"] = item.QKCount;
  1690. dr["针孔数量"] = item.ZKCount;
  1691. dr["泡泡数量"] = item.PPCount;
  1692. dr["划伤数量"] = item.HSCount;
  1693. dr["压线数量"] = item.YXCount;
  1694. dr["斜边数量"] = item.XBCount;
  1695. dr["格栅数量"] = item.SXCount;
  1696. dr["断栅数量"] = item.DSCount;
  1697. dr["钢丝断裂数量"] = item.GSDLCount;
  1698. dr["残胶堵孔数量"] = item.CJDKCount;
  1699. dt.Rows.Add(dr);//在表的对象的行里添加此行
  1700. }
  1701. try
  1702. {
  1703. // 创建一个新的CSV文件并写入数据
  1704. using (StreamWriter writer = new StreamWriter(filePath, false, UnicodeEncoding.GetEncoding("GB2312")))
  1705. {
  1706. // 写入CSV文件的标题行
  1707. for (int i = 0; i < dt.Columns.Count; i++)
  1708. {
  1709. writer.Write(dt.Columns[i].ColumnName + ",");
  1710. }
  1711. writer.Write("\r\n");
  1712. for (int i = 0; i < dt.Rows.Count; i++)
  1713. {
  1714. // 写入数据行
  1715. for (int j = 0; j < dt.Columns.Count; j++)
  1716. {
  1717. writer.Write(dt.Rows[i][j] + ",");
  1718. }
  1719. writer.Write("\r\n");
  1720. //Console.WriteLine("CSV文件写入成功!");
  1721. }
  1722. }
  1723. }
  1724. catch (Exception ex)
  1725. {
  1726. MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1727. }
  1728. return;
  1729. }
  1730. private void skinButton1_Click(object sender, EventArgs e)
  1731. {
  1732. DataTable dt = (DataTable)dataGridView1.DataSource;
  1733. if (dt.Rows.Count > 0)
  1734. {
  1735. SaveFileDialog fileDialog = new SaveFileDialog();
  1736. //fileDialog.Filter = "数据文件(*.csv)|*.csv";
  1737. fileDialog.Filter = "数据文件(*.xlsx)|*.xlsx";
  1738. fileDialog.Title = "保存数据";
  1739. //保存对话框是否记忆上次打开的目录
  1740. fileDialog.RestoreDirectory = true;
  1741. if (fileDialog.ShowDialog() == DialogResult.OK)
  1742. {
  1743. try
  1744. {
  1745. string filePath = fileDialog.FileName; // CSV文件路径
  1746. List<Point> pt;
  1747. DataTable tdt = GetExcelTabel(out pt);
  1748. OutputAsExcelFile(tdt, filePath, pt);
  1749. //ShowAllDataTableEx(filePath);
  1750. MessageBox.Show("数据导出成功!" , "完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
  1751. }
  1752. catch (Exception ex)
  1753. {
  1754. MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1755. }
  1756. }
  1757. }
  1758. }
  1759. #endregion
  1760. private void btnClear_Click(object sender, EventArgs e)
  1761. {
  1762. cbProductCode.Text = "";
  1763. }
  1764. }
  1765. }