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

1884 linhas
92 KiB

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