版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

2233 lines
114 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. List<Product> products = new List<Product>();
  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. //dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列
  199. dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列
  200. foreach(var item in list)
  201. {
  202. //老流程
  203. if(item.StepInfo == null ||item.StepInfo.ProcessType != "快速流程")
  204. {
  205. //加入数据表
  206. if(item.SizeDefectInfoList == null)
  207. item.SizeDefectInfoList = new List<SizeDefectInfo>();
  208. #region 张力
  209. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  210. {
  211. PointCode = "Tension",
  212. StepName = "张力",
  213. Data = item.Tension1,
  214. });
  215. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  216. {
  217. PointCode = "Tension",
  218. StepName = "张力",
  219. Data = item.Tension2,
  220. });
  221. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  222. {
  223. PointCode = "Tension",
  224. StepName = "张力",
  225. Data = item.Tension3,
  226. });
  227. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  228. {
  229. PointCode = "Tension",
  230. StepName = "张力",
  231. Data = item.Tension4,
  232. });
  233. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  234. {
  235. PointCode = "Tension",
  236. StepName = "张力",
  237. Data = item.Tension5,
  238. });
  239. #endregion
  240. #region 厚度
  241. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  242. {
  243. PointCode = "Height",
  244. StepName = "厚度",
  245. Data = item.Height1,
  246. });
  247. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  248. {
  249. PointCode = "Height",
  250. StepName = "厚度",
  251. Data = item.Height2,
  252. });
  253. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  254. {
  255. PointCode = "Height",
  256. StepName = "厚度",
  257. Data = item.Height3,
  258. });
  259. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  260. {
  261. PointCode = "Height",
  262. StepName = "厚度",
  263. Data = item.Height4,
  264. });
  265. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  266. {
  267. PointCode = "Height",
  268. StepName = "厚度",
  269. Data = item.Height5,
  270. });
  271. #endregion
  272. #region YPT
  273. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  274. {
  275. PointCode = "Y轴方向PT值检测",
  276. StepName = "Y轴方向PT值",
  277. Data = item.PT1,
  278. });
  279. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  280. {
  281. PointCode = "Y轴方向PT值检测",
  282. StepName = "Y轴方向PT值",
  283. Data = item.PT2,
  284. });
  285. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  286. {
  287. PointCode = "Y轴方向PT值检测",
  288. StepName = "Y轴方向PT值",
  289. Data = item.PT3,
  290. });
  291. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  292. {
  293. PointCode = "Y轴方向PT值检测",
  294. StepName = "Y轴方向PT值",
  295. Data = item.PT5,
  296. });
  297. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  298. {
  299. PointCode = "Y轴方向PT值检测",
  300. StepName = "Y轴方向PT值",
  301. Data = item.PT6,
  302. });
  303. #endregion
  304. #region 线宽
  305. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  306. {
  307. PointCode = "线宽正面",
  308. StepName = "线宽",
  309. Data = item.LineWidth1,
  310. });
  311. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  312. {
  313. PointCode = "线宽正面",
  314. StepName = "线宽",
  315. Data = item.LineWidth2,
  316. });
  317. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  318. {
  319. PointCode = "线宽正面",
  320. StepName = "线宽",
  321. Data = item.LineWidth3,
  322. });
  323. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  324. {
  325. PointCode = "线宽正面",
  326. StepName = "线宽",
  327. Data = item.LineWidth4,
  328. });
  329. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  330. {
  331. PointCode = "线宽正面",
  332. StepName = "线宽",
  333. Data = item.LineWidth5,
  334. });
  335. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  336. {
  337. PointCode = "线宽正面",
  338. StepName = "线宽",
  339. Data = item.LineWidth6,
  340. });
  341. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  342. {
  343. PointCode = "线宽正面",
  344. StepName = "线宽",
  345. Data = item.LineWidth7,
  346. });
  347. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  348. {
  349. PointCode = "线宽正面",
  350. StepName = "线宽",
  351. Data = item.LineWidth8,
  352. });
  353. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  354. {
  355. PointCode = "线宽正面",
  356. StepName = "线宽",
  357. Data = item.LineWidth9,
  358. });
  359. #endregion
  360. if (!dataCnt.ContainsKey("张力"))
  361. dataCnt.Add("张力", 5);
  362. else
  363. if (dataCnt["张力"] < 5)
  364. dataCnt["张力"] = 5;
  365. if (!dataCnt.ContainsKey("厚度"))
  366. dataCnt.Add("厚度", 5);
  367. else
  368. if (dataCnt["厚度"] < 5)
  369. dataCnt["厚度"] = 5;
  370. if (!dataCnt.ContainsKey("Y轴方向PT值检测"))
  371. dataCnt.Add("Y轴方向PT值检测", 5);
  372. else
  373. if (dataCnt["Y轴方向PT值检测"] < 5)
  374. dataCnt["Y轴方向PT值检测"] = 5;
  375. if (!dataCnt.ContainsKey("线宽正面"))
  376. dataCnt.Add("线宽正面", 9);
  377. else
  378. if (dataCnt["线宽正面"] < 9)
  379. dataCnt["线宽正面"] = 9;
  380. }
  381. else
  382. {
  383. //string[] pointType = new string[19] {"Tension", "Height", "Y轴方向PT值检测" , "线宽正面" , "反面检测" ,
  384. // "X轴方向PT值检测","主栅连接线检测","主栅宽度检测","主栅间距","细栅间距检测","背极宽度",
  385. // "主栅长度检测","Mark点横向间距","Mark点竖向间距","鱼叉口长","鱼叉口宽","鱼叉口间距", "蜈蚣角长", "蜈蚣角宽"};
  386. //按照检测项目分类
  387. //string[] pointType = labels.ToArray();
  388. //for (int i = 0; i < pointType.Length; i++)
  389. //{
  390. // List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.PointCode == pointType[i]).ToList();
  391. // if (t.Count > 0)
  392. // {
  393. // //当前测试项数据个数
  394. // if (!dataCnt.ContainsKey(pointType[i]))
  395. // dataCnt.Add(pointType[i], t.Count);
  396. // else
  397. // if (dataCnt[pointType[i]] < t.Count)
  398. // dataCnt[pointType[i]] = t.Count;
  399. // }
  400. //}
  401. //按照步骤流程分类
  402. string[] pointType = item.SizeDefectInfoList.Select(t => t.StepName).Distinct().ToList().ToArray();
  403. for (int i = 0; i < pointType.Length; i++)
  404. {
  405. List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.StepName == pointType[i]&& !q.isAverage).ToList();
  406. if (t.Count > 0)
  407. {
  408. //当前测试项数据个数
  409. if (!dataCnt.ContainsKey(pointType[i]))
  410. dataCnt.Add(pointType[i], t.Count);
  411. else
  412. if (dataCnt[pointType[i]] < t.Count)
  413. dataCnt[pointType[i]] = t.Count;
  414. }
  415. }
  416. }
  417. }
  418. //插入列
  419. foreach (var item in dataCnt)
  420. {
  421. dt.Columns.Add(new DataColumn($"{item.Key}上下限", typeof(string)));
  422. //按步骤名称插入列
  423. for (int i = 0; i < item.Value; i++)
  424. dt.Columns.Add(new DataColumn($"{item.Key}-{i + 1}", typeof(string)));
  425. dt.Columns.Add(new DataColumn($"{item.Key}均值", typeof(string)));
  426. #if false
  427. switch (item.Key)
  428. {
  429. case "Tension":
  430. for (int i = 0; i < item.Value; i++)
  431. dt.Columns.Add(new DataColumn($"张力{i+1}", typeof(string)));
  432. dt.Columns.Add(new DataColumn("张力均值", typeof(string)));
  433. break;
  434. case "Height":
  435. for (int i = 0; i < item.Value; i++)
  436. dt.Columns.Add(new DataColumn($"厚度{i + 1}", typeof(string)));
  437. dt.Columns.Add(new DataColumn("厚度均值", typeof(string)));
  438. break;
  439. case "Y轴方向PT值检测":
  440. for (int i = 0; i < item.Value; i++)
  441. dt.Columns.Add(new DataColumn($"Y轴方向PT值{i + 1}", typeof(string)));
  442. dt.Columns.Add(new DataColumn("Y轴方向PT值均值", typeof(string)));
  443. break;
  444. case "线宽正面":
  445. for (int i = 0; i < item.Value; i++)
  446. dt.Columns.Add(new DataColumn($"线宽正面{i + 1}", typeof(string)));
  447. dt.Columns.Add(new DataColumn("线宽正面均值", typeof(string)));
  448. break;
  449. case "反面检测":
  450. for (int i = 0; i < item.Value; i++)
  451. dt.Columns.Add(new DataColumn($"反面检测{i + 1}", typeof(string)));
  452. dt.Columns.Add(new DataColumn("反面检测均值", typeof(string)));
  453. break;
  454. case "X轴方向PT值检测":
  455. for (int i = 0; i < item.Value; i++)
  456. dt.Columns.Add(new DataColumn($"X轴方向PT值{i + 1}", typeof(string)));
  457. dt.Columns.Add(new DataColumn("X轴方向PT值均值", typeof(string)));
  458. break;
  459. case "主栅连接线检测":
  460. for (int i = 0; i < item.Value; i++)
  461. dt.Columns.Add(new DataColumn($"主栅连接线检测值{i + 1}", typeof(string)));
  462. dt.Columns.Add(new DataColumn("主栅连接线检测均值", typeof(string)));
  463. break;
  464. case "主栅宽度检测":
  465. for (int i = 0; i < item.Value; i++)
  466. dt.Columns.Add(new DataColumn($"主栅宽度检测值{i + 1}", typeof(string)));
  467. dt.Columns.Add(new DataColumn("主栅宽度检测均值", typeof(string)));
  468. break;
  469. case "主栅间距":
  470. for (int i = 0; i < item.Value; i++)
  471. dt.Columns.Add(new DataColumn($"主栅间距值{i + 1}", typeof(string)));
  472. dt.Columns.Add(new DataColumn("主栅间距均值", typeof(string)));
  473. break;
  474. case "细栅间距检测":
  475. for (int i = 0; i < item.Value; i++)
  476. dt.Columns.Add(new DataColumn($"细栅间距检测值{i + 1}", typeof(string)));
  477. dt.Columns.Add(new DataColumn("细栅间距检测均值", typeof(string)));
  478. break;
  479. case "背极宽度":
  480. for (int i = 0; i < item.Value; i++)
  481. dt.Columns.Add(new DataColumn($"背极宽度值{i + 1}", typeof(string)));
  482. dt.Columns.Add(new DataColumn("背极宽度均值", typeof(string)));
  483. break;
  484. case "主栅长度检测":
  485. for (int i = 0; i < item.Value; i++)
  486. dt.Columns.Add(new DataColumn($"主栅长度检测{i + 1}", typeof(string)));
  487. dt.Columns.Add(new DataColumn("主栅长度检测均值", typeof(string)));
  488. break;
  489. case "Mark点横向间距":
  490. for (int i = 0; i < item.Value; i++)
  491. dt.Columns.Add(new DataColumn($"Mark点横向间距{i + 1}", typeof(string)));
  492. dt.Columns.Add(new DataColumn("Mark点横向间距均值", typeof(string)));
  493. break;
  494. case "Mark点竖向间距":
  495. for (int i = 0; i < item.Value; i++)
  496. dt.Columns.Add(new DataColumn($"Mark点竖向间距{i + 1}", typeof(string)));
  497. dt.Columns.Add(new DataColumn("Mark点竖向间距均值", typeof(string)));
  498. break;
  499. case "鱼叉口长":
  500. for (int i = 0; i < item.Value; i++)
  501. dt.Columns.Add(new DataColumn($"鱼叉口长{i + 1}", typeof(string)));
  502. dt.Columns.Add(new DataColumn("鱼叉口长均值", typeof(string)));
  503. break;
  504. case "鱼叉口宽":
  505. for (int i = 0; i < item.Value; i++)
  506. dt.Columns.Add(new DataColumn($"鱼叉口宽{i + 1}", typeof(string)));
  507. dt.Columns.Add(new DataColumn("鱼叉口宽均值", typeof(string)));
  508. break;
  509. case "鱼叉口间距":
  510. for (int i = 0; i < item.Value; i++)
  511. dt.Columns.Add(new DataColumn($"鱼叉口间距{i + 1}", typeof(string)));
  512. dt.Columns.Add(new DataColumn("鱼叉口间距均值", typeof(string)));
  513. break;
  514. case "蜈蚣角长":
  515. for (int i = 0; i < item.Value; i++)
  516. dt.Columns.Add(new DataColumn($"蜈蚣角长{i + 1}", typeof(string)));
  517. dt.Columns.Add(new DataColumn("蜈蚣角长均值", typeof(string)));
  518. break;
  519. case "蜈蚣角宽":
  520. for (int i = 0; i < item.Value; i++)
  521. dt.Columns.Add(new DataColumn($"蜈蚣角宽{i + 1}", typeof(string)));
  522. dt.Columns.Add(new DataColumn("蜈蚣角宽均值", typeof(string)));
  523. break;
  524. case "分片间隔":
  525. for (int i = 0; i < item.Value; i++)
  526. dt.Columns.Add(new DataColumn($"分片间隔{i + 1}", typeof(string)));
  527. dt.Columns.Add(new DataColumn("分片间隔均值", typeof(string)));
  528. break;
  529. case "焊点长":
  530. for (int i = 0; i < item.Value; i++)
  531. dt.Columns.Add(new DataColumn($"焊点长{i + 1}", typeof(string)));
  532. dt.Columns.Add(new DataColumn("焊点长均值", typeof(string)));
  533. break;
  534. case "焊点宽":
  535. for (int i = 0; i < item.Value; i++)
  536. dt.Columns.Add(new DataColumn($"焊点宽{i + 1}", typeof(string)));
  537. dt.Columns.Add(new DataColumn("焊点宽均值", typeof(string)));
  538. break;
  539. case "焊点间隔":
  540. for (int i = 0; i < item.Value; i++)
  541. dt.Columns.Add(new DataColumn($"焊点间隔{i + 1}", typeof(string)));
  542. dt.Columns.Add(new DataColumn("焊点间隔均值", typeof(string)));
  543. break;
  544. }
  545. #endif
  546. }
  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. dt.Columns.Add(new DataColumn("断栅数量", typeof(int)));//在表中添加int类型的列
  559. dt.Columns.Add(new DataColumn("钢丝断裂数量", typeof(int)));//在表中添加int类型的列
  560. dt.Columns.Add(new DataColumn("残胶堵孔数量", typeof(int)));//在表中添加int类型的列
  561. //插入按钮
  562. dataGridView1.DataSource = dt;
  563. //在datagridview中添加button按钮
  564. //DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
  565. //btn.Name = "Modify";
  566. //btn.HeaderText = "操作";
  567. //btn.DefaultCellStyle.NullValue = "修改";
  568. //dataGridView1.Columns.Add(btn);
  569. //DataGridViewButtonColumn btn2 = new DataGridViewButtonColumn();
  570. //btn2.Name = "HistoryView";
  571. //btn2.HeaderText = "查看";
  572. //btn2.DefaultCellStyle.NullValue = "历史";
  573. //dataGridView1.Columns.Add(btn2);
  574. DataGridViewButtonColumn btn3 = new DataGridViewButtonColumn();
  575. btn3.Name = "Distribution";
  576. btn3.HeaderText = "缺陷分布";
  577. btn3.DefaultCellStyle.NullValue = "分布";
  578. dataGridView1.Columns.Add(btn3);
  579. DataTable dts = (DataTable)dataGridView1.DataSource;
  580. dts.Clear();
  581. List<Point> FailPoint = new List<Point>();
  582. int row_index = 0;
  583. int col_index = 9;
  584. foreach (var item in list)
  585. {
  586. //新增
  587. DataRow dr;//行
  588. dr = dts.NewRow();
  589. //dr["选择"] = false;
  590. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  591. dr["检测单号"] = item.DetectOrder;
  592. dr["产品名称"] = item.ProductInfo.Name;
  593. dr["料号"] = item.ProductInfo.Code;
  594. dr["网版编码"] = item.SN;
  595. dr["批次"] = item.BatchId;
  596. //dr["目数"] = item.ProductInfo.HoleCount;
  597. dr["目数"] = item.MeshNumber;
  598. dr["线径"] = item.WireDiameter;
  599. dr["合格"] = item.Qualified ? "合格": "不合格";
  600. //dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  601. //dr["异常情况"] = item.Abnormalities;
  602. //dr["修复人员"] = item.RepairCode;
  603. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  604. //根据不同步骤名称插入数据
  605. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  606. foreach (var tdata in dataCnt)
  607. {
  608. tempd = item.SizeDefectInfoList.Where(q => q.StepName == tdata.Key).ToList();
  609. var tempstep = item.StepInfo.ProcessList.Where(q => q.ProcessName == tdata.Key).FirstOrDefault();
  610. if (tempstep != null)
  611. {
  612. JObject processParam = JObject.Parse(tempstep.ProcessParams);
  613. double vMax = processParam.Value<double>("MaxLimit");
  614. double vMin = processParam.Value<double>("MinLimit");
  615. bool isOpenLimit = processParam.Value<bool>("OpenUseLimit");
  616. string limit = "";
  617. if (vMax == vMin)
  618. limit = $"±{vMax}";
  619. else
  620. limit = $"(+{vMax},-{vMin})";
  621. if (isOpenLimit)
  622. {
  623. dr[$"{tdata.Key}上下限"] = $"{processParam.Value<double>("StandardValues")}{limit}";
  624. }
  625. else
  626. dr[$"{tdata.Key}上下限"] = $"";
  627. }
  628. List<double> dataList = new List<double>();
  629. for (int i = 0; i < tempd.Count; i++)
  630. {
  631. if (tempd[i].isAverage == false)
  632. {
  633. dataList.Add(tempd[i].Data);
  634. dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  635. }
  636. //不合格数据添加队列
  637. if(i + 1 == tempd.Count)
  638. col_index = this.dataGridView1.Columns[$"{tdata.Key}均值"].Index;
  639. else
  640. col_index = this.dataGridView1.Columns[$"{tdata.Key}-{i + 1}"].Index;
  641. if (tempd[i].result == 2)
  642. FailPoint.Add(new Point(row_index, col_index));
  643. }
  644. if (dataList.Count > 0)
  645. dr[$"{tdata.Key}均值"] = dataList.Average().ToString("0.0000");
  646. else
  647. dr[$"{tdata.Key}均值"] = "0";
  648. #if false
  649. switch (tdata.Key)
  650. {
  651. case "Tension":
  652. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Tension").ToList();
  653. for (int i = 0; i < tempd.Count; i++)
  654. dr[$"张力{i + 1}"] = tempd[i].Data.ToString("0.00") ;
  655. dr["张力均值"] = item.TensionValue.ToString("0.00");
  656. break;
  657. case "Height":
  658. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Height").ToList();
  659. for (int i = 0; i < tempd.Count; i++)
  660. dr[$"厚度{i + 1}"] = tempd[i].Data.ToString("0.00");
  661. dr["厚度均值"] = item.HeightValue.ToString("0.00");
  662. break;
  663. case "Y轴方向PT值检测":
  664. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Y轴方向PT值检测").ToList();
  665. for (int i = 0; i < tempd.Count; i++)
  666. dr[$"Y轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  667. dr["Y轴方向PT值均值"] = item.PTValue.ToString("0.0000");
  668. break;
  669. case "线宽正面":
  670. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "线宽正面").ToList();
  671. for (int i = 0; i < tempd.Count; i++)
  672. dr[$"线宽正面{i + 1}"] = tempd[i].Data.ToString("0.00");
  673. dr["线宽正面均值"] = item.LineWidthValue.ToString("0.00");
  674. break;
  675. case "反面检测":
  676. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "反面检测").ToList();
  677. for (int i = 0; i < tempd.Count; i++)
  678. dr[$"反面检测{i + 1}"] = tempd[i].Data.ToString("0.00");
  679. dr["反面检测均值"] = item.FLineWidthValue.ToString("0.00");
  680. break;
  681. case "X轴方向PT值检测":
  682. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "X轴方向PT值检测").ToList();
  683. for (int i = 0; i < tempd.Count; i++)
  684. dr[$"X轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  685. dr["X轴方向PT值均值"] = item.XPTValue.ToString("0.0000");
  686. break;
  687. case "主栅连接线检测":
  688. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅连接线检测").ToList();
  689. for (int i = 0; i < tempd.Count; i++)
  690. dr[$"主栅连接线检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  691. dr["主栅连接线检测均值"] = item.MGridIntervalValue.ToString("0.0000");
  692. break;
  693. case "主栅宽度检测":
  694. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅宽度检测").ToList();
  695. for (int i = 0; i < tempd.Count; i++)
  696. dr[$"主栅宽度检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  697. dr["主栅宽度检测均值"] = item.MGridWidthValue.ToString("0.0000");
  698. break;
  699. case "主栅间距":
  700. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅间距").ToList();
  701. for (int i = 0; i < tempd.Count; i++)
  702. dr[$"主栅间距值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  703. dr["主栅间距均值"] = item.MGridSpreadValue.ToString("0.0000");
  704. break;
  705. case "细栅间距检测":
  706. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "细栅间距检测").ToList();
  707. for (int i = 0; i < tempd.Count; i++)
  708. dr[$"细栅间距检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  709. dr["细栅间距检测均值"] = item.FGridSpreadValue.ToString("0.0000");
  710. break;
  711. case "背极宽度":
  712. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "背极宽度").ToList();
  713. for (int i = 0; i < tempd.Count; i++)
  714. dr[$"背极宽度值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  715. dr["背极宽度均值"] = item.BackPoleWidthValue.ToString("0.0000");
  716. break;
  717. case "主栅长度检测":
  718. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅长度检测").ToList();
  719. for (int i = 0; i < tempd.Count; i++)
  720. dr[$"主栅长度检测{i + 1}"] = tempd[i].Data.ToString("0.0000");
  721. dr["主栅长度检测均值"] = item.MGridLengthValue.ToString("0.0000");
  722. break;
  723. case "Mark点横向间距":
  724. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Mark点横向间距").ToList();
  725. for (int i = 0; i < tempd.Count; i++)
  726. dr[$"Mark点横向间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  727. dr["Mark点横向间距均值"] = item.MarkXDisValue.ToString("0.0000");
  728. break;
  729. case "Mark点竖向间距":
  730. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Mark点竖向间距").ToList();
  731. for (int i = 0; i < tempd.Count; i++)
  732. dr[$"Mark点竖向间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  733. dr["Mark点竖向间距均值"] = item.MarkYDisValue.ToString("0.0000");
  734. break;
  735. case "鱼叉口长":
  736. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口长").ToList();
  737. for (int i = 0; i < tempd.Count; i++)
  738. dr[$"鱼叉口长{i + 1}"] = tempd[i].Data.ToString("0.0000");
  739. dr["鱼叉口长均值"] = item.ForkLengthValue.ToString("0.0000");
  740. break;
  741. case "鱼叉口宽":
  742. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口宽").ToList();
  743. for (int i = 0; i < tempd.Count; i++)
  744. dr[$"鱼叉口宽{i + 1}"] = tempd[i].Data.ToString("0.0000");
  745. dr["鱼叉口宽均值"] = item.ForkWidthValue.ToString("0.0000");
  746. break;
  747. case "鱼叉口间距":
  748. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口间距").ToList();
  749. for (int i = 0; i < tempd.Count; i++)
  750. dr[$"鱼叉口间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  751. dr["鱼叉口间距均值"] = item.ForkDisValue.ToString("0.0000");
  752. break;
  753. case "蜈蚣角长":
  754. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "蜈蚣角长").ToList();
  755. for (int i = 0; i < tempd.Count; i++)
  756. dr[$"蜈蚣角长{i + 1}"] = tempd[i].Data.ToString("0.0000");
  757. dr["蜈蚣角均值"] = item.ChilopodLengthValue.ToString("0.0000");
  758. break;
  759. case "蜈蚣角宽":
  760. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "蜈蚣角宽").ToList();
  761. for (int i = 0; i < tempd.Count; i++)
  762. dr[$"蜈蚣角宽{i + 1}"] = tempd[i].Data.ToString("0.0000");
  763. dr["蜈蚣角宽均值"] = item.ChilopodWidthValue.ToString("0.0000");
  764. break;
  765. case "分片间隔":
  766. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "分片间隔").ToList();
  767. for (int i = 0; i < tempd.Count; i++)
  768. dr[$"分片间隔{i + 1}"] = tempd[i].Data.ToString("0.0000");
  769. dr["分片间隔均值"] = item.MarkYDisValue.ToString("0.0000");
  770. break;
  771. case "焊点长":
  772. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "焊点长").ToList();
  773. for (int i = 0; i < tempd.Count; i++)
  774. dr[$"焊点长{i + 1}"] = tempd[i].Data.ToString("0.0000");
  775. dr["焊点长均值"] = item.ForkLengthValue.ToString("0.0000");
  776. break;
  777. case "焊点宽":
  778. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "焊点宽").ToList();
  779. for (int i = 0; i < tempd.Count; i++)
  780. dr[$"焊点宽{i + 1}"] = tempd[i].Data.ToString("0.0000");
  781. dr["焊点宽均值"] = item.ForkWidthValue.ToString("0.0000");
  782. break;
  783. case "焊点间隔":
  784. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "焊点间隔").ToList();
  785. for (int i = 0; i < tempd.Count; i++)
  786. dr[$"焊点间隔{i + 1}"] = tempd[i].Data.ToString("0.0000");
  787. dr["焊点间隔均值"] = item.ForkDisValue.ToString("0.0000");
  788. break;
  789. }
  790. #endif
  791. }
  792. dr["堵孔数量"] = item.DKCount;
  793. dr["脏污数量"] = item.ZWCount;
  794. dr["钢丝异常数量"] = item.GSYCCount;
  795. dr["纤维丝数量"] = item.XWSCount;
  796. dr["缺口数量"] = item.QKCount;
  797. dr["针孔数量"] = item.ZKCount;
  798. dr["泡泡数量"] = item.PPCount ;
  799. dr["划伤数量"] = item.HSCount;
  800. dr["压线数量"] = item.YXCount;
  801. dr["斜边数量"] = item.XBCount;
  802. dr["格栅数量"] = item.SXCount;
  803. dr["断栅数量"] = item.DSCount;
  804. dr["钢丝断裂数量"] = item.GSDLCount;
  805. dr["残胶堵孔数量"] = item.CJDKCount;
  806. dts.Rows.Add(dr);//在表的对象的行里添加此行
  807. row_index++;
  808. }
  809. //dts.DefaultView.Sort = "时间戳 desc";
  810. //dts = dts.DefaultView.ToTable();
  811. dataGridView1.DataSource = dts;
  812. this.dataGridView1.Columns[0].Width = 50;
  813. this.dataGridView1.Columns[1].Width = 120;
  814. for (int i = 0; i < 11; i++) //去除3列
  815. {
  816. this.dataGridView1.Columns[i].Frozen = true;
  817. }
  818. for (int i = 0; i < FailPoint.Count; i++)
  819. {
  820. DataGridViewCell aa = dataGridView1.Rows[FailPoint[i].X].Cells[FailPoint[i].Y];
  821. aa.Style.ForeColor = Color.Red;
  822. //aa.Style.BackColor = Color.LightGreen;
  823. }
  824. return;
  825. }
  826. #endregion
  827. private void QueryData()
  828. {
  829. QueryOrderData queryOrderData = new QueryOrderData();
  830. queryOrderData.model = "order";
  831. queryOrderData.fields = "*";
  832. queryOrderData.order = "id desc";
  833. queryOrderData.pageNum = this.pageCtrl1.PageIndex;
  834. queryOrderData.pageSize = this.pageCtrl1.PageSize;
  835. queryOrderData.domain = new List<domainItem>();
  836. domainItem startTime = new domainItem();
  837. startTime.FieldName = "CreateTime";
  838. startTime.FieldValue = dateTimePicker1.Value.ToString("yyyy-M-d");
  839. startTime.ConditionalType = 3;
  840. queryOrderData.domain.Add(startTime);
  841. domainItem endTime = new domainItem();
  842. endTime.FieldName = "CreateTime";
  843. endTime.FieldValue = dateTimePicker2.Value.ToString("yyyy-M-d") + " 23:59:59";
  844. endTime.ConditionalType = 5;
  845. queryOrderData.domain.Add(endTime);
  846. //OrderService.GetList
  847. //产品条件
  848. if (!string.IsNullOrEmpty(cbProductCode.Text))
  849. {
  850. domainItem ProductCode = new domainItem();
  851. ProductCode.FieldName = "ProductId";
  852. ProductCode.FieldValue = SysMgr.Instance.ProductIdList[cbProductCode.SelectedIndex].ToString();
  853. ProductCode.ConditionalType = 6;
  854. queryOrderData.domain.Add(ProductCode);
  855. }
  856. //合格条件
  857. if (!string.IsNullOrEmpty(comboBox2.Text))
  858. {
  859. domainItem CompareResult = new domainItem();
  860. CompareResult.FieldName = "Qualified";
  861. CompareResult.FieldValue = comboBox2.Text == "合格"? "1":"0";
  862. CompareResult.ConditionalType = 0;
  863. queryOrderData.domain.Add(CompareResult);
  864. }
  865. //比对条件
  866. if (!string.IsNullOrEmpty(comboBox1.Text))
  867. {
  868. domainItem CompareResultOptions = new domainItem();
  869. CompareResultOptions.FieldName = "CompareResult";
  870. CompareResultOptions.FieldValue = comboBox1.Text == "通过" ? "1" : comboBox1.Text == "未通过" ? "2" : "0";
  871. CompareResultOptions.ConditionalType = 0;
  872. queryOrderData.domain.Add(CompareResultOptions);
  873. }
  874. //异常条件
  875. if (!string.IsNullOrEmpty(comboBox3.Text))
  876. {
  877. domainItem State = new domainItem();
  878. State.FieldName = "State";
  879. State.FieldValue = comboBox3.Text == "修复" ? "5" : comboBox3.Text == "未修复" ? "0" : "10";
  880. State.ConditionalType = 0;
  881. queryOrderData.domain.Add(State);
  882. }
  883. int totalcnt = 0;
  884. JObject str = JObject.Parse(JsonConvert.SerializeObject(queryOrderData));
  885. var list = getTableList(str, out totalcnt);
  886. this.pageCtrl1.DrawControl(totalcnt);
  887. QueryOrders = list;
  888. //自动生成表格
  889. ShowDataTableEx(list);
  890. //总数居
  891. queryOrderData.pageNum = 0;
  892. queryOrderData.pageSize = 0;
  893. JObject str2 = JObject.Parse(JsonConvert.SerializeObject(queryOrderData));
  894. var list2 = getTableList(str2, out totalcnt);
  895. QueryAllOrders = list2;
  896. }
  897. private void skinButton2_Click(object sender, EventArgs e)
  898. {
  899. pageCtrl1.PageIndex = 1;
  900. QueryData();
  901. }
  902. #endregion
  903. #region 表格单击
  904. #region 更新数据
  905. #endregion
  906. private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
  907. {
  908. int Index = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引
  909. if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "操作")
  910. {
  911. //修改数据
  912. AmendantRecordFrm recordFrm = new AmendantRecordFrm(QueryOrders[Index]);
  913. recordFrm.ShowDialog();
  914. //重新显示
  915. QueryData();
  916. }
  917. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "查看")
  918. {
  919. //查看历史
  920. HistoryViewFrm Frm = new HistoryViewFrm(QueryOrders[Index]);
  921. Frm.ShowDialog();
  922. }
  923. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "缺陷分布")
  924. {
  925. //缺陷分布
  926. DistributionFrm Frm = new DistributionFrm(QueryOrders[Index]);
  927. Frm.WindowState = FormWindowState.Maximized;
  928. Frm.ShowDialog();
  929. }
  930. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "选择")
  931. {
  932. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[Index].Cells[0];
  933. Boolean flag = Convert.ToBoolean(checkCell.Value);
  934. if (flag == true) //查找被选择的数据行
  935. {
  936. checkCell.Value = false;
  937. }
  938. else
  939. checkCell.Value = true;
  940. }
  941. }
  942. #endregion
  943. #region 界面调整
  944. private void DataQueryFrm_SizeChanged(object sender, EventArgs e)
  945. {
  946. if (this.WindowState == FormWindowState.Maximized)
  947. {
  948. this.WindowState = FormWindowState.Normal;
  949. this.Top = 0;
  950. this.Left = 0;
  951. this.Width = SystemInformation.WorkingArea.Width;
  952. this.Height = SystemInformation.WorkingArea.Height;
  953. }
  954. }
  955. #endregion
  956. #region 删除
  957. private int delTableList(JObject req)
  958. {
  959. JObject res = new JObject();
  960. try
  961. {
  962. string model = req.Value<string>("model");
  963. string domain = req.Value<JArray>("domain").ToString();
  964. //var idArr = req.Value<JArray>("idList");
  965. //List<int> ids = new List<int>();
  966. //foreach (int id in idArr) ids.Add(id);
  967. int result = OrderService.DeleteList(model, domain);
  968. return 1;
  969. }
  970. catch (Exception ex)
  971. {
  972. }
  973. return 0;
  974. }
  975. private void skinButton3_Click(object sender, EventArgs e)
  976. {
  977. for (int i = 0; i < dataGridView1.Rows.Count; i++)
  978. {
  979. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells[0];
  980. Boolean flag = Convert.ToBoolean(checkCell.Value);
  981. if(flag == true)
  982. {
  983. QueryOrderData delOrderData = new QueryOrderData();
  984. delOrderData.model = "order";
  985. delOrderData.domain = new List<domainItem>();
  986. domainItem doitem = new domainItem();
  987. doitem.FieldName = "Id";
  988. doitem.FieldValue = QueryOrders[i].Id.ToString();
  989. doitem.ConditionalType = 6;
  990. delOrderData.domain.Add(doitem);
  991. JObject str = JObject.Parse(JsonConvert.SerializeObject(delOrderData));
  992. int ret = delTableList(str);
  993. if (ret == 1)
  994. {
  995. //删除历史
  996. QueryOrderData HistoryOrderData = new QueryOrderData();
  997. HistoryOrderData.model = "OrderHistory";
  998. HistoryOrderData.domain = new List<domainItem>();
  999. domainItem doitem2 = new domainItem();
  1000. doitem2.FieldName = "Pid";
  1001. doitem2.FieldValue = QueryOrders[i].Id.ToString();
  1002. doitem2.ConditionalType = 6;
  1003. HistoryOrderData.domain.Add(doitem2);
  1004. JObject str2 = JObject.Parse(JsonConvert.SerializeObject(HistoryOrderData));
  1005. delTableList(str2);
  1006. }
  1007. }
  1008. }
  1009. //重新显示
  1010. QueryData();
  1011. }
  1012. #endregion
  1013. #region Excel导出
  1014. private DataTable GetExcelTabel(out List<Point> points)
  1015. {
  1016. points = new List<Point>();
  1017. //记录数据类型列数
  1018. Dictionary<string, int> dataCnt = new Dictionary<string, int>();
  1019. List<Product> products = new List<Product>();
  1020. DataTable dt = new DataTable(); //建立个数据表
  1021. //通用列
  1022. dt.Columns.Add(new DataColumn("检验日期", typeof(string)));//在表中添加string类型的列
  1023. dt.Columns.Add(new DataColumn("检测单号", typeof(string)));//在表中添加string类型的列
  1024. dt.Columns.Add(new DataColumn("产品名称", typeof(string)));//在表中添加string类型的列
  1025. dt.Columns.Add(new DataColumn("料号", typeof(string)));//在表中添加string类型的列
  1026. dt.Columns.Add(new DataColumn("网版编码", typeof(string)));//在表中添加string类型的列
  1027. dt.Columns.Add(new DataColumn("批次", typeof(string)));//在表中添加string类型的列
  1028. dt.Columns.Add(new DataColumn("目数", typeof(string)));//在表中添加string类型的列
  1029. dt.Columns.Add(new DataColumn("线径", typeof(string)));//在表中添加string类型的列
  1030. dt.Columns.Add(new DataColumn("合格", typeof(string)));//在表中添加string类型的列
  1031. //dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列
  1032. //dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列
  1033. //dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列
  1034. dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列
  1035. foreach (var item in QueryAllOrders)
  1036. {
  1037. //老流程
  1038. if (item.StepInfo == null || item.StepInfo.ProcessType != "快速流程")
  1039. {
  1040. //加入数据表
  1041. if (item.SizeDefectInfoList == null)
  1042. item.SizeDefectInfoList = new List<SizeDefectInfo>();
  1043. #region 张力
  1044. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1045. {
  1046. PointCode = "Tension",
  1047. StepName = "张力",
  1048. Data = item.Tension1,
  1049. });
  1050. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1051. {
  1052. PointCode = "Tension",
  1053. StepName = "张力",
  1054. Data = item.Tension2,
  1055. });
  1056. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1057. {
  1058. PointCode = "Tension",
  1059. StepName = "张力",
  1060. Data = item.Tension3,
  1061. });
  1062. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1063. {
  1064. PointCode = "Tension",
  1065. StepName = "张力",
  1066. Data = item.Tension4,
  1067. });
  1068. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1069. {
  1070. PointCode = "Tension",
  1071. StepName = "张力",
  1072. Data = item.Tension5,
  1073. });
  1074. #endregion
  1075. #region 厚度
  1076. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1077. {
  1078. PointCode = "Height",
  1079. StepName = "厚度",
  1080. Data = item.Height1,
  1081. });
  1082. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1083. {
  1084. PointCode = "Height",
  1085. StepName = "厚度",
  1086. Data = item.Height2,
  1087. });
  1088. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1089. {
  1090. PointCode = "Height",
  1091. StepName = "厚度",
  1092. Data = item.Height3,
  1093. });
  1094. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1095. {
  1096. PointCode = "Height",
  1097. StepName = "厚度",
  1098. Data = item.Height4,
  1099. });
  1100. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1101. {
  1102. PointCode = "Height",
  1103. StepName = "厚度",
  1104. Data = item.Height5,
  1105. });
  1106. #endregion
  1107. #region YPT
  1108. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1109. {
  1110. PointCode = "Y轴方向PT值检测",
  1111. StepName = "Y轴方向PT值",
  1112. Data = item.PT1,
  1113. });
  1114. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1115. {
  1116. PointCode = "Y轴方向PT值检测",
  1117. StepName = "Y轴方向PT值",
  1118. Data = item.PT2,
  1119. });
  1120. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1121. {
  1122. PointCode = "Y轴方向PT值检测",
  1123. StepName = "Y轴方向PT值",
  1124. Data = item.PT3,
  1125. });
  1126. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1127. {
  1128. PointCode = "Y轴方向PT值检测",
  1129. StepName = "Y轴方向PT值",
  1130. Data = item.PT5,
  1131. });
  1132. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1133. {
  1134. PointCode = "Y轴方向PT值检测",
  1135. StepName = "Y轴方向PT值",
  1136. Data = item.PT6,
  1137. });
  1138. #endregion
  1139. #region 线宽
  1140. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1141. {
  1142. PointCode = "线宽正面",
  1143. StepName = "线宽",
  1144. Data = item.LineWidth1,
  1145. });
  1146. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1147. {
  1148. PointCode = "线宽正面",
  1149. StepName = "线宽",
  1150. Data = item.LineWidth2,
  1151. });
  1152. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1153. {
  1154. PointCode = "线宽正面",
  1155. StepName = "线宽",
  1156. Data = item.LineWidth3,
  1157. });
  1158. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1159. {
  1160. PointCode = "线宽正面",
  1161. StepName = "线宽",
  1162. Data = item.LineWidth4,
  1163. });
  1164. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1165. {
  1166. PointCode = "线宽正面",
  1167. StepName = "线宽",
  1168. Data = item.LineWidth5,
  1169. });
  1170. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1171. {
  1172. PointCode = "线宽正面",
  1173. StepName = "线宽",
  1174. Data = item.LineWidth6,
  1175. });
  1176. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1177. {
  1178. PointCode = "线宽正面",
  1179. StepName = "线宽",
  1180. Data = item.LineWidth7,
  1181. });
  1182. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1183. {
  1184. PointCode = "线宽正面",
  1185. StepName = "线宽",
  1186. Data = item.LineWidth8,
  1187. });
  1188. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1189. {
  1190. PointCode = "线宽正面",
  1191. StepName = "线宽",
  1192. Data = item.LineWidth9,
  1193. });
  1194. #endregion
  1195. if (!dataCnt.ContainsKey("张力"))
  1196. dataCnt.Add("张力", 5);
  1197. else
  1198. if (dataCnt["张力"] < 5)
  1199. dataCnt["张力"] = 5;
  1200. if (!dataCnt.ContainsKey("厚度"))
  1201. dataCnt.Add("厚度", 5);
  1202. else
  1203. if (dataCnt["厚度"] < 5)
  1204. dataCnt["厚度"] = 5;
  1205. if (!dataCnt.ContainsKey("Y轴方向PT值检测"))
  1206. dataCnt.Add("Y轴方向PT值检测", 5);
  1207. else
  1208. if (dataCnt["Y轴方向PT值检测"] < 5)
  1209. dataCnt["Y轴方向PT值检测"] = 5;
  1210. if (!dataCnt.ContainsKey("线宽正面"))
  1211. dataCnt.Add("线宽正面", 9);
  1212. else
  1213. if (dataCnt["线宽正面"] < 9)
  1214. dataCnt["线宽正面"] = 9;
  1215. }
  1216. else
  1217. {
  1218. //按照步骤流程分类
  1219. string[] pointType = item.SizeDefectInfoList.Select(t => t.StepName).Distinct().ToList().ToArray();
  1220. for (int i = 0; i < pointType.Length; i++)
  1221. {
  1222. List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.StepName == pointType[i] && !q.isAverage).ToList();
  1223. if (t.Count > 0)
  1224. {
  1225. //当前测试项数据个数
  1226. if (!dataCnt.ContainsKey(pointType[i]))
  1227. dataCnt.Add(pointType[i], t.Count);
  1228. else
  1229. if (dataCnt[pointType[i]] < t.Count)
  1230. dataCnt[pointType[i]] = t.Count;
  1231. }
  1232. }
  1233. }
  1234. }
  1235. #if false //灵活插入
  1236. //插入列
  1237. foreach (var item in dataCnt)
  1238. {
  1239. //按步骤名称插入列
  1240. for (int i = 0; i < item.Value; i++)
  1241. dt.Columns.Add(new DataColumn($"{item.Key}-{i + 1}", typeof(string)));
  1242. dt.Columns.Add(new DataColumn($"{item.Key}均值", typeof(string)));
  1243. }
  1244. #else //固定写死
  1245. #region 张力
  1246. dt.Columns.Add(new DataColumn($"张力测量(N)上下限", typeof(string)));
  1247. dt.Columns.Add(new DataColumn($"张力测量(N)-1", typeof(string)));
  1248. dt.Columns.Add(new DataColumn($"张力测量(N)-2", typeof(string)));
  1249. dt.Columns.Add(new DataColumn($"张力测量(N)-3", typeof(string)));
  1250. dt.Columns.Add(new DataColumn($"张力测量(N)-4", typeof(string)));
  1251. dt.Columns.Add(new DataColumn($"张力测量(N)-5", typeof(string)));
  1252. dt.Columns.Add(new DataColumn($"张力测量(N)均值", typeof(string)));
  1253. #endregion
  1254. #region 厚度
  1255. dt.Columns.Add(new DataColumn($"厚度测量(um)上下限", typeof(string)));
  1256. dt.Columns.Add(new DataColumn($"厚度测量(um)-1", typeof(string)));
  1257. dt.Columns.Add(new DataColumn($"厚度测量(um)-2", typeof(string)));
  1258. dt.Columns.Add(new DataColumn($"厚度测量(um)-3", typeof(string)));
  1259. dt.Columns.Add(new DataColumn($"厚度测量(um)-4", typeof(string)));
  1260. dt.Columns.Add(new DataColumn($"厚度测量(um)-5", typeof(string)));
  1261. dt.Columns.Add(new DataColumn($"厚度测量(um)均值", typeof(string)));
  1262. #endregion
  1263. #region Y-PT检测(mm)
  1264. dt.Columns.Add(new DataColumn($"Y-PT检测(mm)上下限", typeof(string)));
  1265. dt.Columns.Add(new DataColumn($"Y-PT检测(mm)-1", typeof(string)));
  1266. dt.Columns.Add(new DataColumn($"Y-PT检测(mm)-2", typeof(string)));
  1267. dt.Columns.Add(new DataColumn($"Y-PT检测(mm)-3", typeof(string)));
  1268. dt.Columns.Add(new DataColumn($"Y-PT检测(mm)-4", typeof(string)));
  1269. dt.Columns.Add(new DataColumn($"Y-PT检测(mm)-5", typeof(string)));
  1270. dt.Columns.Add(new DataColumn($"Y-PT检测(mm)均值", typeof(string)));
  1271. #endregion
  1272. #region 主栅长1(mm)
  1273. dt.Columns.Add(new DataColumn($"主栅长1(mm)上下限", typeof(string)));
  1274. dt.Columns.Add(new DataColumn($"主栅长1(mm)-1", typeof(string)));
  1275. dt.Columns.Add(new DataColumn($"主栅长1(mm)-2", typeof(string)));
  1276. dt.Columns.Add(new DataColumn($"主栅长1(mm)-3", typeof(string)));
  1277. dt.Columns.Add(new DataColumn($"主栅长1(mm)-4", typeof(string)));
  1278. dt.Columns.Add(new DataColumn($"主栅长1(mm)-5", typeof(string)));
  1279. dt.Columns.Add(new DataColumn($"主栅长1(mm)均值", typeof(string)));
  1280. #endregion
  1281. #region 主栅长2(mm)
  1282. dt.Columns.Add(new DataColumn($"主栅长2(mm)上下限", typeof(string)));
  1283. dt.Columns.Add(new DataColumn($"主栅长2(mm)-1", typeof(string)));
  1284. dt.Columns.Add(new DataColumn($"主栅长2(mm)-2", typeof(string)));
  1285. dt.Columns.Add(new DataColumn($"主栅长2(mm)-3", typeof(string)));
  1286. dt.Columns.Add(new DataColumn($"主栅长2(mm)-4", typeof(string)));
  1287. dt.Columns.Add(new DataColumn($"主栅长2(mm)-5", typeof(string)));
  1288. dt.Columns.Add(new DataColumn($"主栅长2(mm)均值", typeof(string)));
  1289. #endregion
  1290. #region 主栅间距(mm)
  1291. dt.Columns.Add(new DataColumn($"主栅间距(mm)上下限", typeof(string)));
  1292. dt.Columns.Add(new DataColumn($"主栅间距(mm)-1", typeof(string)));
  1293. dt.Columns.Add(new DataColumn($"主栅间距(mm)-2", typeof(string)));
  1294. dt.Columns.Add(new DataColumn($"主栅间距(mm)-3", typeof(string)));
  1295. dt.Columns.Add(new DataColumn($"主栅间距(mm)-4", typeof(string)));
  1296. dt.Columns.Add(new DataColumn($"主栅间距(mm)-5", typeof(string)));
  1297. dt.Columns.Add(new DataColumn($"主栅间距(mm)均值", typeof(string)));
  1298. #endregion
  1299. #region 主栅宽度(mm)
  1300. dt.Columns.Add(new DataColumn($"主栅宽度(mm)上下限", typeof(string)));
  1301. dt.Columns.Add(new DataColumn($"主栅宽度(mm)-1", typeof(string)));
  1302. dt.Columns.Add(new DataColumn($"主栅宽度(mm)-2", typeof(string)));
  1303. dt.Columns.Add(new DataColumn($"主栅宽度(mm)-3", typeof(string)));
  1304. dt.Columns.Add(new DataColumn($"主栅宽度(mm)-4", typeof(string)));
  1305. dt.Columns.Add(new DataColumn($"主栅宽度(mm)-5", typeof(string)));
  1306. dt.Columns.Add(new DataColumn($"主栅宽度(mm)均值", typeof(string)));
  1307. #endregion
  1308. #region 主栅宽(mm)
  1309. dt.Columns.Add(new DataColumn($"主栅宽(mm)上下限", typeof(string)));
  1310. dt.Columns.Add(new DataColumn($"主栅宽(mm)-1", typeof(string)));
  1311. dt.Columns.Add(new DataColumn($"主栅宽(mm)-2", typeof(string)));
  1312. dt.Columns.Add(new DataColumn($"主栅宽(mm)-3", typeof(string)));
  1313. dt.Columns.Add(new DataColumn($"主栅宽(mm)-4", typeof(string)));
  1314. dt.Columns.Add(new DataColumn($"主栅宽(mm)-5", typeof(string)));
  1315. dt.Columns.Add(new DataColumn($"主栅宽(mm)均值", typeof(string)));
  1316. #endregion
  1317. #region 主栅宽(um)
  1318. dt.Columns.Add(new DataColumn($"主栅宽(um)上下限", typeof(string)));
  1319. dt.Columns.Add(new DataColumn($"主栅宽(um)-1", typeof(string)));
  1320. dt.Columns.Add(new DataColumn($"主栅宽(um)-2", typeof(string)));
  1321. dt.Columns.Add(new DataColumn($"主栅宽(um)-3", typeof(string)));
  1322. dt.Columns.Add(new DataColumn($"主栅宽(um)均值", typeof(string)));
  1323. #endregion
  1324. #region 细栅宽度
  1325. dt.Columns.Add(new DataColumn($"细栅宽度(um)上下限", typeof(string)));
  1326. dt.Columns.Add(new DataColumn($"细栅宽度(um)-1", typeof(string)));
  1327. dt.Columns.Add(new DataColumn($"细栅宽度(um)-2", typeof(string)));
  1328. dt.Columns.Add(new DataColumn($"细栅宽度(um)-3", typeof(string)));
  1329. dt.Columns.Add(new DataColumn($"细栅宽度(um)-4", typeof(string)));
  1330. dt.Columns.Add(new DataColumn($"细栅宽度(um)-5", typeof(string)));
  1331. dt.Columns.Add(new DataColumn($"细栅宽度(um)均值", typeof(string)));
  1332. #endregion
  1333. #region 细栅间距
  1334. dt.Columns.Add(new DataColumn($"细栅间距(mm)上下限", typeof(string)));
  1335. dt.Columns.Add(new DataColumn($"细栅间距(mm)-1", typeof(string)));
  1336. dt.Columns.Add(new DataColumn($"细栅间距(mm)-2", typeof(string)));
  1337. dt.Columns.Add(new DataColumn($"细栅间距(mm)-3", typeof(string)));
  1338. dt.Columns.Add(new DataColumn($"细栅间距(mm)-4", typeof(string)));
  1339. dt.Columns.Add(new DataColumn($"细栅间距(mm)-5", typeof(string)));
  1340. dt.Columns.Add(new DataColumn($"细栅间距(mm)均值", typeof(string)));
  1341. #endregion
  1342. #region 焊点长1(mm)
  1343. dt.Columns.Add(new DataColumn($"焊点长1(mm)上下限", typeof(string)));
  1344. dt.Columns.Add(new DataColumn($"焊点长1(mm)-1", typeof(string)));
  1345. dt.Columns.Add(new DataColumn($"焊点长1(mm)-2", typeof(string)));
  1346. dt.Columns.Add(new DataColumn($"焊点长1(mm)-3", typeof(string)));
  1347. dt.Columns.Add(new DataColumn($"焊点长1(mm)-4", typeof(string)));
  1348. dt.Columns.Add(new DataColumn($"焊点长1(mm)-5", typeof(string)));
  1349. dt.Columns.Add(new DataColumn($"焊点长1(mm)均值", typeof(string)));
  1350. #endregion
  1351. #region 焊点长2(mm)
  1352. dt.Columns.Add(new DataColumn($"焊点长2(mm)上下限", typeof(string)));
  1353. dt.Columns.Add(new DataColumn($"焊点长2(mm)-1", typeof(string)));
  1354. dt.Columns.Add(new DataColumn($"焊点长2(mm)-2", typeof(string)));
  1355. dt.Columns.Add(new DataColumn($"焊点长2(mm)-3", typeof(string)));
  1356. dt.Columns.Add(new DataColumn($"焊点长2(mm)-4", typeof(string)));
  1357. dt.Columns.Add(new DataColumn($"焊点长2(mm)-5", typeof(string)));
  1358. dt.Columns.Add(new DataColumn($"焊点长2(mm)均值", typeof(string)));
  1359. #endregion
  1360. #region 焊点宽1(mm)
  1361. dt.Columns.Add(new DataColumn($"焊点宽1(mm)上下限", typeof(string)));
  1362. dt.Columns.Add(new DataColumn($"焊点宽1(mm)-1", typeof(string)));
  1363. dt.Columns.Add(new DataColumn($"焊点宽1(mm)-2", typeof(string)));
  1364. dt.Columns.Add(new DataColumn($"焊点宽1(mm)-3", typeof(string)));
  1365. dt.Columns.Add(new DataColumn($"焊点宽1(mm)-4", typeof(string)));
  1366. dt.Columns.Add(new DataColumn($"焊点宽1(mm)-5", typeof(string)));
  1367. dt.Columns.Add(new DataColumn($"焊点宽1(mm)均值", typeof(string)));
  1368. #endregion
  1369. #region 焊点宽2(mm)
  1370. dt.Columns.Add(new DataColumn($"焊点宽2(mm)上下限", typeof(string)));
  1371. dt.Columns.Add(new DataColumn($"焊点宽2(mm)-1", typeof(string)));
  1372. dt.Columns.Add(new DataColumn($"焊点宽2(mm)-2", typeof(string)));
  1373. dt.Columns.Add(new DataColumn($"焊点宽2(mm)-3", typeof(string)));
  1374. dt.Columns.Add(new DataColumn($"焊点宽2(mm)-4", typeof(string)));
  1375. dt.Columns.Add(new DataColumn($"焊点宽2(mm)-5", typeof(string)));
  1376. dt.Columns.Add(new DataColumn($"焊点宽2(mm)均值", typeof(string)));
  1377. #endregion
  1378. #region 焊点间隔1(mm)
  1379. dt.Columns.Add(new DataColumn($"焊点间隔1(mm)上下限", typeof(string)));
  1380. dt.Columns.Add(new DataColumn($"焊点间隔1(mm)-1", typeof(string)));
  1381. dt.Columns.Add(new DataColumn($"焊点间隔1(mm)-2", typeof(string)));
  1382. dt.Columns.Add(new DataColumn($"焊点间隔1(mm)-3", typeof(string)));
  1383. dt.Columns.Add(new DataColumn($"焊点间隔1(mm)-4", typeof(string)));
  1384. dt.Columns.Add(new DataColumn($"焊点间隔1(mm)-5", typeof(string)));
  1385. dt.Columns.Add(new DataColumn($"焊点间隔1(mm)均值", typeof(string)));
  1386. #endregion
  1387. #region 焊点间隔2(mm)
  1388. dt.Columns.Add(new DataColumn($"焊点间隔2(mm)上下限", typeof(string)));
  1389. dt.Columns.Add(new DataColumn($"焊点间隔2(mm)-1", typeof(string)));
  1390. dt.Columns.Add(new DataColumn($"焊点间隔2(mm)-2", typeof(string)));
  1391. dt.Columns.Add(new DataColumn($"焊点间隔2(mm)-3", typeof(string)));
  1392. dt.Columns.Add(new DataColumn($"焊点间隔2(mm)-4", typeof(string)));
  1393. dt.Columns.Add(new DataColumn($"焊点间隔2(mm)-5", typeof(string)));
  1394. dt.Columns.Add(new DataColumn($"焊点间隔2(mm)均值", typeof(string)));
  1395. #endregion
  1396. #region 焊点间隔3(mm)
  1397. dt.Columns.Add(new DataColumn($"焊点间隔3(mm)上下限", typeof(string)));
  1398. dt.Columns.Add(new DataColumn($"焊点间隔3(mm)-1", typeof(string)));
  1399. dt.Columns.Add(new DataColumn($"焊点间隔3(mm)-2", typeof(string)));
  1400. dt.Columns.Add(new DataColumn($"焊点间隔3(mm)-3", typeof(string)));
  1401. dt.Columns.Add(new DataColumn($"焊点间隔3(mm)-4", typeof(string)));
  1402. dt.Columns.Add(new DataColumn($"焊点间隔3(mm)-5", typeof(string)));
  1403. dt.Columns.Add(new DataColumn($"焊点间隔3(mm)均值", typeof(string)));
  1404. #endregion
  1405. #region 焊点间隔4(mm)
  1406. dt.Columns.Add(new DataColumn($"焊点间隔4(mm)上下限", typeof(string)));
  1407. dt.Columns.Add(new DataColumn($"焊点间隔4(mm)-1", typeof(string)));
  1408. dt.Columns.Add(new DataColumn($"焊点间隔4(mm)-2", typeof(string)));
  1409. dt.Columns.Add(new DataColumn($"焊点间隔4(mm)-3", typeof(string)));
  1410. dt.Columns.Add(new DataColumn($"焊点间隔4(mm)-4", typeof(string)));
  1411. dt.Columns.Add(new DataColumn($"焊点间隔4(mm)-5", typeof(string)));
  1412. dt.Columns.Add(new DataColumn($"焊点间隔4(mm)均值", typeof(string)));
  1413. #endregion
  1414. #region 鱼叉口长(mm)
  1415. dt.Columns.Add(new DataColumn($"鱼叉口长(mm)上下限", typeof(string)));
  1416. dt.Columns.Add(new DataColumn($"鱼叉口长(mm)-1", typeof(string)));
  1417. dt.Columns.Add(new DataColumn($"鱼叉口长(mm)-2", typeof(string)));
  1418. dt.Columns.Add(new DataColumn($"鱼叉口长(mm)-3", typeof(string)));
  1419. dt.Columns.Add(new DataColumn($"鱼叉口长(mm)-4", typeof(string)));
  1420. dt.Columns.Add(new DataColumn($"鱼叉口长(mm)-5", typeof(string)));
  1421. dt.Columns.Add(new DataColumn($"鱼叉口长(mm)均值", typeof(string)));
  1422. #endregion
  1423. #region 鱼叉口宽(mm)
  1424. dt.Columns.Add(new DataColumn($"鱼叉口宽(mm)上下限", typeof(string)));
  1425. dt.Columns.Add(new DataColumn($"鱼叉口宽(mm)-1", typeof(string)));
  1426. dt.Columns.Add(new DataColumn($"鱼叉口宽(mm)-2", typeof(string)));
  1427. dt.Columns.Add(new DataColumn($"鱼叉口宽(mm)-3", typeof(string)));
  1428. dt.Columns.Add(new DataColumn($"鱼叉口宽(mm)-4", typeof(string)));
  1429. dt.Columns.Add(new DataColumn($"鱼叉口宽(mm)-5", typeof(string)));
  1430. dt.Columns.Add(new DataColumn($"鱼叉口宽(mm)均值", typeof(string)));
  1431. #endregion
  1432. #region 鱼叉口间距(mm)
  1433. dt.Columns.Add(new DataColumn($"鱼叉口间距(mm)上下限", typeof(string)));
  1434. dt.Columns.Add(new DataColumn($"鱼叉口间距(mm)-1", typeof(string)));
  1435. dt.Columns.Add(new DataColumn($"鱼叉口间距(mm)-2", typeof(string)));
  1436. dt.Columns.Add(new DataColumn($"鱼叉口间距(mm)-3", typeof(string)));
  1437. dt.Columns.Add(new DataColumn($"鱼叉口间距(mm)-4", typeof(string)));
  1438. dt.Columns.Add(new DataColumn($"鱼叉口间距(mm)-5", typeof(string)));
  1439. dt.Columns.Add(new DataColumn($"鱼叉口间距(mm)均值", typeof(string)));
  1440. #endregion
  1441. #region 蜈蚣脚长(mm)
  1442. dt.Columns.Add(new DataColumn($"蜈蚣脚长(mm)上下限", typeof(string)));
  1443. dt.Columns.Add(new DataColumn($"蜈蚣脚长(mm)-1", typeof(string)));
  1444. dt.Columns.Add(new DataColumn($"蜈蚣脚长(mm)-2", typeof(string)));
  1445. dt.Columns.Add(new DataColumn($"蜈蚣脚长(mm)-3", typeof(string)));
  1446. dt.Columns.Add(new DataColumn($"蜈蚣脚长(mm)-4", typeof(string)));
  1447. dt.Columns.Add(new DataColumn($"蜈蚣脚长(mm)-5", typeof(string)));
  1448. dt.Columns.Add(new DataColumn($"蜈蚣脚长(mm)均值", typeof(string)));
  1449. #endregion
  1450. #region 蜈蚣脚宽(mm)
  1451. dt.Columns.Add(new DataColumn($"蜈蚣脚宽(mm)上下限", typeof(string)));
  1452. dt.Columns.Add(new DataColumn($"蜈蚣脚宽(mm)-1", typeof(string)));
  1453. dt.Columns.Add(new DataColumn($"蜈蚣脚宽(mm)-2", typeof(string)));
  1454. dt.Columns.Add(new DataColumn($"蜈蚣脚宽(mm)-3", typeof(string)));
  1455. dt.Columns.Add(new DataColumn($"蜈蚣脚宽(mm)-4", typeof(string)));
  1456. dt.Columns.Add(new DataColumn($"蜈蚣脚宽(mm)-5", typeof(string)));
  1457. dt.Columns.Add(new DataColumn($"蜈蚣脚宽(mm)均值", typeof(string)));
  1458. #endregion
  1459. #region 分片间隔(mm)
  1460. dt.Columns.Add(new DataColumn($"分片间隔(mm)上下限", typeof(string)));
  1461. dt.Columns.Add(new DataColumn($"分片间隔(mm)-1", typeof(string)));
  1462. dt.Columns.Add(new DataColumn($"分片间隔(mm)-2", typeof(string)));
  1463. dt.Columns.Add(new DataColumn($"分片间隔(mm)-3", typeof(string)));
  1464. dt.Columns.Add(new DataColumn($"分片间隔(mm)-4", typeof(string)));
  1465. dt.Columns.Add(new DataColumn($"分片间隔(mm)-5", typeof(string)));
  1466. dt.Columns.Add(new DataColumn($"分片间隔(mm)均值", typeof(string)));
  1467. #endregion
  1468. #region Mark-X(mm)
  1469. dt.Columns.Add(new DataColumn($"Mark-X(mm)上下限", typeof(string)));
  1470. dt.Columns.Add(new DataColumn($"Mark-X(mm)-1", typeof(string)));
  1471. dt.Columns.Add(new DataColumn($"Mark-X(mm)均值", typeof(string)));
  1472. #endregion
  1473. #region Mark-Y(mm)
  1474. dt.Columns.Add(new DataColumn($"Mark-Y(mm)上下限", typeof(string)));
  1475. dt.Columns.Add(new DataColumn($"Mark-Y(mm)-1", typeof(string)));
  1476. dt.Columns.Add(new DataColumn($"Mark-Y(mm)均值", typeof(string)));
  1477. #endregion
  1478. #region 3道鱼叉口宽(mm)
  1479. dt.Columns.Add(new DataColumn($"3道鱼叉口宽(mm)上下限", typeof(string)));
  1480. dt.Columns.Add(new DataColumn($"3道鱼叉口宽(mm)-1", typeof(string)));
  1481. dt.Columns.Add(new DataColumn($"3道鱼叉口宽(mm)-2", typeof(string)));
  1482. dt.Columns.Add(new DataColumn($"3道鱼叉口宽(mm)-3", typeof(string)));
  1483. dt.Columns.Add(new DataColumn($"3道鱼叉口宽(mm)-4", typeof(string)));
  1484. dt.Columns.Add(new DataColumn($"3道鱼叉口宽(mm)-5", typeof(string)));
  1485. dt.Columns.Add(new DataColumn($"3道鱼叉口宽(mm)均值", typeof(string)));
  1486. #endregion
  1487. #region 3道鱼叉口间隔(mm)
  1488. dt.Columns.Add(new DataColumn($"3道鱼叉口间隔(mm)上下限", typeof(string)));
  1489. dt.Columns.Add(new DataColumn($"3道鱼叉口间隔(mm)-1", typeof(string)));
  1490. dt.Columns.Add(new DataColumn($"3道鱼叉口间隔(mm)-2", typeof(string)));
  1491. dt.Columns.Add(new DataColumn($"3道鱼叉口间隔(mm)-3", typeof(string)));
  1492. dt.Columns.Add(new DataColumn($"3道鱼叉口间隔(mm)-4", typeof(string)));
  1493. dt.Columns.Add(new DataColumn($"3道鱼叉口间隔(mm)-5", typeof(string)));
  1494. dt.Columns.Add(new DataColumn($"3道鱼叉口间隔(mm)均值", typeof(string)));
  1495. #endregion
  1496. #region 断点间距(mm)
  1497. dt.Columns.Add(new DataColumn($"断点间距(mm)上下限", typeof(string)));
  1498. dt.Columns.Add(new DataColumn($"断点间距(mm)-1", typeof(string)));
  1499. dt.Columns.Add(new DataColumn($"断点间距(mm)-2", typeof(string)));
  1500. dt.Columns.Add(new DataColumn($"断点间距(mm)-3", typeof(string)));
  1501. dt.Columns.Add(new DataColumn($"断点间距(mm)-4", typeof(string)));
  1502. dt.Columns.Add(new DataColumn($"断点间距(mm)-5", typeof(string)));
  1503. dt.Columns.Add(new DataColumn($"断点间距(mm)均值", typeof(string)));
  1504. #endregion
  1505. #endif
  1506. dt.Columns.Add(new DataColumn("堵孔数量", typeof(int)));//在表中添加int类型的列
  1507. dt.Columns.Add(new DataColumn("脏污数量", typeof(int)));//在表中添加int类型的列
  1508. dt.Columns.Add(new DataColumn("钢丝异常数量", typeof(int)));//在表中添加int类型的列
  1509. dt.Columns.Add(new DataColumn("纤维丝数量", typeof(int)));//在表中添加int类型的列
  1510. dt.Columns.Add(new DataColumn("缺口数量", typeof(int)));//在表中添加int类型的列
  1511. dt.Columns.Add(new DataColumn("针孔数量", typeof(int)));//在表中添加int类型的列
  1512. dt.Columns.Add(new DataColumn("泡泡数量", typeof(int)));//在表中添加int类型的列
  1513. dt.Columns.Add(new DataColumn("划伤数量", typeof(int)));//在表中添加int类型的列
  1514. dt.Columns.Add(new DataColumn("压线数量", typeof(int)));//在表中添加int类型的列
  1515. dt.Columns.Add(new DataColumn("斜边数量", typeof(int)));//在表中添加int类型的列
  1516. dt.Columns.Add(new DataColumn("栅线数量", typeof(int)));//在表中添加int类型的列
  1517. dt.Columns.Add(new DataColumn("断栅数量", typeof(int)));//在表中添加int类型的列
  1518. dt.Columns.Add(new DataColumn("钢丝断裂数量", typeof(int)));//在表中添加int类型的列
  1519. dt.Columns.Add(new DataColumn("残胶堵孔数量", typeof(int)));//在表中添加int类型的列
  1520. int row_index = 0;
  1521. foreach (var item in QueryAllOrders)
  1522. {
  1523. //新增
  1524. DataRow dr;//行
  1525. dr = dt.NewRow();
  1526. //dr["选择"] = false;
  1527. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  1528. dr["检测单号"] = item.DetectOrder;
  1529. dr["产品名称"] = item.ProductInfo.Name;
  1530. dr["料号"] = item.ProductInfo.Code;
  1531. dr["网版编码"] = item.SN;
  1532. dr["批次"] = item.BatchId;
  1533. //dr["目数"] = item.ProductInfo.HoleCount;
  1534. dr["目数"] = item.MeshNumber;
  1535. dr["线径"] = item.WireDiameter;
  1536. dr["合格"] = item.Qualified ? "合格" : "不合格";
  1537. //dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  1538. //dr["异常情况"] = item.Abnormalities;
  1539. //dr["修复人员"] = item.RepairCode;
  1540. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  1541. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  1542. foreach (var tdata in dataCnt)
  1543. {
  1544. try
  1545. {
  1546. tempd = item.SizeDefectInfoList.Where(q => q.StepName == tdata.Key).ToList();
  1547. var tempstep = item.StepInfo.ProcessList.Where(q => q.ProcessName == tdata.Key).FirstOrDefault();
  1548. if (tempstep != null)
  1549. {
  1550. JObject processParam = JObject.Parse(tempstep.ProcessParams);
  1551. double vMax = processParam.Value<double>("MaxLimit");
  1552. double vMin = processParam.Value<double>("MinLimit");
  1553. bool isOpenLimit = processParam.Value<bool>("OpenUseLimit");
  1554. string limit = "";
  1555. if (vMax == vMin)
  1556. limit = $"±{vMax}";
  1557. else
  1558. limit = $"(+{vMax},-{vMin})";
  1559. if (isOpenLimit)
  1560. {
  1561. dr[$"{tdata.Key}上下限"] = $"{processParam.Value<double>("StandardValues")}{limit}";
  1562. }
  1563. else
  1564. dr[$"{tdata.Key}上下限"] = $"";
  1565. }
  1566. List<double> dataList = new List<double>();
  1567. //for (int i = 0; i < tempd.Count; i++)
  1568. // dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1569. //dr[$"{tdata.Key}均值"] = item.TensionValue.ToString("0.0000");
  1570. for (int i = 0; i < tempd.Count; i++)
  1571. {
  1572. int col_index = 0;
  1573. if (!tempd[i].isAverage)
  1574. {
  1575. dataList.Add(tempd[i].Data);
  1576. dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1577. col_index = dr.Table.Columns.IndexOf($"{tdata.Key}-{i + 1}");
  1578. }
  1579. else
  1580. col_index = dr.Table.Columns.IndexOf($"{tdata.Key}均值");
  1581. if (tempd[i].result == 2)
  1582. points.Add(new Point(row_index, col_index));
  1583. }
  1584. if (dataList.Count > 0)
  1585. dr[$"{tdata.Key}均值"] = dataList.Average().ToString("0.0000");
  1586. else
  1587. dr[$"{tdata.Key}均值"] = "0";
  1588. }
  1589. catch { }
  1590. }
  1591. dr["堵孔数量"] = item.DKCount;
  1592. dr["脏污数量"] = item.ZWCount;
  1593. dr["钢丝异常数量"] = item.GSYCCount;
  1594. dr["纤维丝数量"] = item.XWSCount;
  1595. dr["缺口数量"] = item.QKCount;
  1596. dr["针孔数量"] = item.ZKCount;
  1597. dr["泡泡数量"] = item.PPCount;
  1598. dr["划伤数量"] = item.HSCount;
  1599. dr["压线数量"] = item.YXCount;
  1600. dr["斜边数量"] = item.XBCount;
  1601. dr["栅线数量"] = item.SXCount;
  1602. dr["断栅数量"] = item.DSCount;
  1603. dr["钢丝断裂数量"] = item.GSDLCount;
  1604. dr["残胶堵孔数量"] = item.CJDKCount;
  1605. dt.Rows.Add(dr);//在表的对象的行里添加此行
  1606. row_index++;
  1607. }
  1608. return dt;
  1609. }
  1610. #region excel导出
  1611. public Excel.Application m_xlApp = null;
  1612. public void OutputAsExcelFile(DataTable dtTable, String filePath, List<Point> points)
  1613. {
  1614. //string filePath = "";
  1615. //SaveFileDialog s = new SaveFileDialog();
  1616. //s.Title = "保存Excel文件";
  1617. //s.Filter = "Excel文件(*.xls)|*.xls";
  1618. //s.FilterIndex = 1;
  1619. //if (s.ShowDialog() == DialogResult.OK)
  1620. // filePath = s.FileName;
  1621. //else
  1622. // return;
  1623. //导出dataTable到Excel
  1624. long rowNum = dtTable.Rows.Count;//行数
  1625. int columnNum = dtTable.Columns.Count;//列数
  1626. Excel.Application m_xlApp = new Excel.Application();
  1627. m_xlApp.DisplayAlerts = false;//不显示更改提示
  1628. m_xlApp.Visible = false;
  1629. Excel.Workbooks workbooks = m_xlApp.Workbooks;
  1630. Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
  1631. Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
  1632. try
  1633. {
  1634. string[,] datas = new string[rowNum + 1, columnNum];
  1635. for (int i = 0; i < columnNum; i++) //写入字段
  1636. datas[0, i] = dtTable.Columns[i].Caption; //写入列标
  1637. //Excel.Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, columnNum]);
  1638. Excel.Range range = m_xlApp.Range[worksheet.Cells[1, 1], worksheet.Cells[1, columnNum]];
  1639. range.Interior.ColorIndex = 15;//15代表灰色
  1640. range.Font.Bold = true;
  1641. range.Font.Size = 10;
  1642. int r = 0;
  1643. for (r = 0; r < rowNum; r++)
  1644. {
  1645. for (int i = 0; i < columnNum; i++)
  1646. {
  1647. object obj;
  1648. obj = dtTable.Rows[r][dtTable.Columns[i].ToString()];
  1649. datas[r + 1, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式
  1650. //Console.WriteLine(datas[r + 1, i]);
  1651. }
  1652. System.Windows.Forms.Application.DoEvents();
  1653. //添加进度条
  1654. }
  1655. //Excel.Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]);
  1656. Excel.Range fchR = m_xlApp.Range[worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]];
  1657. fchR.Value2 = datas;
  1658. worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。
  1659. //worksheet.Name = "dd";
  1660. //m_xlApp.WindowState = Excel.XlWindowState.xlMaximized;
  1661. m_xlApp.Visible = false;
  1662. // = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]);
  1663. range = m_xlApp.Range[worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]];
  1664. for (int i = 0; i < points.Count; i++)
  1665. {
  1666. 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]];
  1667. Errrange.Font.ColorIndex = 3;//3红色
  1668. }
  1669. //range.Interior.ColorIndex = 15;//15代表灰色
  1670. range.Font.Size = 9;
  1671. range.RowHeight = 14.25;
  1672. range.Borders.LineStyle = 1;
  1673. range.HorizontalAlignment = 1;
  1674. workbook.Saved = true;
  1675. workbook.SaveCopyAs(filePath);
  1676. }
  1677. catch (Exception ex)
  1678. {
  1679. MessageBox.Show("导出异常:" + ex.Message, "导出异常", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  1680. }
  1681. finally
  1682. {
  1683. EndReport();
  1684. }
  1685. m_xlApp.Workbooks.Close();
  1686. m_xlApp.Workbooks.Application.Quit();
  1687. m_xlApp.Application.Quit();
  1688. m_xlApp.Quit();
  1689. //MessageBox.Show("导出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  1690. }
  1691. private void EndReport()
  1692. {
  1693. object missing = System.Reflection.Missing.Value;
  1694. try
  1695. { }
  1696. catch { }
  1697. finally
  1698. {
  1699. try
  1700. {
  1701. //System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Workbooks);
  1702. //System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Application);
  1703. //System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp);
  1704. //m_xlApp = null;
  1705. }
  1706. catch { }
  1707. try
  1708. {
  1709. //清理垃圾进程
  1710. this.killProcessThread();
  1711. }
  1712. catch { }
  1713. GC.Collect();
  1714. }
  1715. }
  1716. private void killProcessThread()
  1717. {
  1718. ArrayList myProcess = new ArrayList();
  1719. for (int i = 0; i < myProcess.Count; i++)
  1720. {
  1721. try
  1722. {
  1723. System.Diagnostics.Process.GetProcessById(int.Parse((string)myProcess[i])).Kill();
  1724. }
  1725. catch { }
  1726. }
  1727. }
  1728. #endregion
  1729. private void ShowAllDataTableEx(string filePath)
  1730. {
  1731. //记录数据类型列数
  1732. Dictionary<string, int> dataCnt = new Dictionary<string, int>();
  1733. DataTable dt = new DataTable(); //建立个数据表
  1734. //通用列
  1735. dt.Columns.Add(new DataColumn("检验日期", typeof(string)));//在表中添加string类型的列
  1736. dt.Columns.Add(new DataColumn("检测单号", typeof(string)));//在表中添加string类型的列
  1737. dt.Columns.Add(new DataColumn("产品名称", typeof(string)));//在表中添加string类型的列
  1738. dt.Columns.Add(new DataColumn("料号", typeof(string)));//在表中添加string类型的列
  1739. dt.Columns.Add(new DataColumn("网版编码", typeof(string)));//在表中添加string类型的列
  1740. dt.Columns.Add(new DataColumn("批次", typeof(string)));//在表中添加string类型的列
  1741. dt.Columns.Add(new DataColumn("合格", typeof(string)));//在表中添加string类型的列
  1742. //dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列
  1743. //dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列
  1744. //dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列
  1745. dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列
  1746. foreach (var item in QueryAllOrders)
  1747. {
  1748. //老流程
  1749. if (item.StepInfo == null || item.StepInfo.ProcessType != "快速流程")
  1750. {
  1751. //加入数据表
  1752. if (item.SizeDefectInfoList == null)
  1753. item.SizeDefectInfoList = new List<SizeDefectInfo>();
  1754. #region 张力
  1755. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1756. {
  1757. PointCode = "Tension",
  1758. StepName = "张力",
  1759. Data = item.Tension1,
  1760. });
  1761. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1762. {
  1763. PointCode = "Tension",
  1764. StepName = "张力",
  1765. Data = item.Tension2,
  1766. });
  1767. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1768. {
  1769. PointCode = "Tension",
  1770. StepName = "张力",
  1771. Data = item.Tension3,
  1772. });
  1773. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1774. {
  1775. PointCode = "Tension",
  1776. StepName = "张力",
  1777. Data = item.Tension4,
  1778. });
  1779. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1780. {
  1781. PointCode = "Tension",
  1782. StepName = "张力",
  1783. Data = item.Tension5,
  1784. });
  1785. #endregion
  1786. #region 厚度
  1787. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1788. {
  1789. PointCode = "Height",
  1790. StepName = "厚度",
  1791. Data = item.Height1,
  1792. });
  1793. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1794. {
  1795. PointCode = "Height",
  1796. StepName = "厚度",
  1797. Data = item.Height2,
  1798. });
  1799. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1800. {
  1801. PointCode = "Height",
  1802. StepName = "厚度",
  1803. Data = item.Height3,
  1804. });
  1805. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1806. {
  1807. PointCode = "Height",
  1808. StepName = "厚度",
  1809. Data = item.Height4,
  1810. });
  1811. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1812. {
  1813. PointCode = "Height",
  1814. StepName = "厚度",
  1815. Data = item.Height5,
  1816. });
  1817. #endregion
  1818. #region YPT
  1819. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1820. {
  1821. PointCode = "Y轴方向PT值检测",
  1822. StepName = "Y轴方向PT值",
  1823. Data = item.PT1,
  1824. });
  1825. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1826. {
  1827. PointCode = "Y轴方向PT值检测",
  1828. StepName = "Y轴方向PT值",
  1829. Data = item.PT2,
  1830. });
  1831. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1832. {
  1833. PointCode = "Y轴方向PT值检测",
  1834. StepName = "Y轴方向PT值",
  1835. Data = item.PT3,
  1836. });
  1837. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1838. {
  1839. PointCode = "Y轴方向PT值检测",
  1840. StepName = "Y轴方向PT值",
  1841. Data = item.PT5,
  1842. });
  1843. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1844. {
  1845. PointCode = "Y轴方向PT值检测",
  1846. StepName = "Y轴方向PT值",
  1847. Data = item.PT6,
  1848. });
  1849. #endregion
  1850. #region 线宽
  1851. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1852. {
  1853. PointCode = "线宽正面",
  1854. StepName = "线宽",
  1855. Data = item.LineWidth1,
  1856. });
  1857. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1858. {
  1859. PointCode = "线宽正面",
  1860. StepName = "线宽",
  1861. Data = item.LineWidth2,
  1862. });
  1863. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1864. {
  1865. PointCode = "线宽正面",
  1866. StepName = "线宽",
  1867. Data = item.LineWidth3,
  1868. });
  1869. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1870. {
  1871. PointCode = "线宽正面",
  1872. StepName = "线宽",
  1873. Data = item.LineWidth4,
  1874. });
  1875. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1876. {
  1877. PointCode = "线宽正面",
  1878. StepName = "线宽",
  1879. Data = item.LineWidth5,
  1880. });
  1881. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1882. {
  1883. PointCode = "线宽正面",
  1884. StepName = "线宽",
  1885. Data = item.LineWidth6,
  1886. });
  1887. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1888. {
  1889. PointCode = "线宽正面",
  1890. StepName = "线宽",
  1891. Data = item.LineWidth7,
  1892. });
  1893. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1894. {
  1895. PointCode = "线宽正面",
  1896. StepName = "线宽",
  1897. Data = item.LineWidth8,
  1898. });
  1899. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  1900. {
  1901. PointCode = "线宽正面",
  1902. StepName = "线宽",
  1903. Data = item.LineWidth9,
  1904. });
  1905. #endregion
  1906. if (!dataCnt.ContainsKey("张力"))
  1907. dataCnt.Add("张力", 5);
  1908. else
  1909. if (dataCnt["张力"] < 5)
  1910. dataCnt["张力"] = 5;
  1911. if (!dataCnt.ContainsKey("厚度"))
  1912. dataCnt.Add("厚度", 5);
  1913. else
  1914. if (dataCnt["厚度"] < 5)
  1915. dataCnt["厚度"] = 5;
  1916. if (!dataCnt.ContainsKey("Y轴方向PT值检测"))
  1917. dataCnt.Add("Y轴方向PT值检测", 5);
  1918. else
  1919. if (dataCnt["Y轴方向PT值检测"] < 5)
  1920. dataCnt["Y轴方向PT值检测"] = 5;
  1921. if (!dataCnt.ContainsKey("线宽正面"))
  1922. dataCnt.Add("线宽正面", 9);
  1923. else
  1924. if (dataCnt["线宽正面"] < 9)
  1925. dataCnt["线宽正面"] = 9;
  1926. }
  1927. else
  1928. {
  1929. //按照步骤流程分类
  1930. string[] pointType = item.SizeDefectInfoList.Select(t => t.StepName).Distinct().ToList().ToArray();
  1931. for (int i = 0; i < pointType.Length; i++)
  1932. {
  1933. List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.StepName == pointType[i]).ToList();
  1934. if (t.Count > 0)
  1935. {
  1936. //当前测试项数据个数
  1937. if (!dataCnt.ContainsKey(pointType[i]))
  1938. dataCnt.Add(pointType[i], t.Count);
  1939. else
  1940. if (dataCnt[pointType[i]] < t.Count)
  1941. dataCnt[pointType[i]] = t.Count;
  1942. }
  1943. }
  1944. }
  1945. }
  1946. //插入列
  1947. foreach (var item in dataCnt)
  1948. {
  1949. //按步骤名称插入列
  1950. for (int i = 0; i < item.Value; i++)
  1951. dt.Columns.Add(new DataColumn($"{item.Key}-{i + 1}", typeof(string)));
  1952. dt.Columns.Add(new DataColumn($"{item.Key}均值", typeof(string)));
  1953. }
  1954. dt.Columns.Add(new DataColumn("堵孔数量", typeof(int)));//在表中添加int类型的列
  1955. dt.Columns.Add(new DataColumn("脏污数量", typeof(int)));//在表中添加int类型的列
  1956. dt.Columns.Add(new DataColumn("钢丝异常数量", typeof(int)));//在表中添加int类型的列
  1957. dt.Columns.Add(new DataColumn("纤维丝数量", typeof(int)));//在表中添加int类型的列
  1958. dt.Columns.Add(new DataColumn("缺口数量", typeof(int)));//在表中添加int类型的列
  1959. dt.Columns.Add(new DataColumn("针孔数量", typeof(int)));//在表中添加int类型的列
  1960. dt.Columns.Add(new DataColumn("泡泡数量", typeof(int)));//在表中添加int类型的列
  1961. dt.Columns.Add(new DataColumn("划伤数量", typeof(int)));//在表中添加int类型的列
  1962. dt.Columns.Add(new DataColumn("压线数量", typeof(int)));//在表中添加int类型的列
  1963. dt.Columns.Add(new DataColumn("斜边数量", typeof(int)));//在表中添加int类型的列
  1964. dt.Columns.Add(new DataColumn("格栅数量", typeof(int)));//在表中添加int类型的列
  1965. dt.Columns.Add(new DataColumn("断栅数量", typeof(int)));//在表中添加int类型的列
  1966. dt.Columns.Add(new DataColumn("钢丝断裂数量", typeof(int)));//在表中添加int类型的列
  1967. dt.Columns.Add(new DataColumn("残胶堵孔数量", typeof(int)));//在表中添加int类型的列
  1968. foreach (var item in QueryAllOrders)
  1969. {
  1970. //新增
  1971. DataRow dr;//行
  1972. dr = dt.NewRow();
  1973. //dr["选择"] = false;
  1974. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  1975. dr["检测单号"] = item.DetectOrder;
  1976. dr["产品名称"] = item.ProductInfo.Name;
  1977. dr["料号"] = item.ProductInfo.Code;
  1978. dr["网版编码"] = item.SN;
  1979. dr["批次"] = item.BatchId;
  1980. dr["合格"] = item.Qualified ? "合格" : "不合格";
  1981. //dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  1982. //dr["异常情况"] = item.Abnormalities;
  1983. //dr["修复人员"] = item.RepairCode;
  1984. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  1985. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  1986. foreach (var tdata in dataCnt)
  1987. {
  1988. tempd = item.SizeDefectInfoList.Where(q => q.StepName == tdata.Key).ToList();
  1989. List<double> dataList = new List<double>();
  1990. //for (int i = 0; i < tempd.Count; i++)
  1991. // dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1992. //dr[$"{tdata.Key}均值"] = item.TensionValue.ToString("0.0000");
  1993. for (int i = 0; i < tempd.Count; i++)
  1994. {
  1995. dataList.Add(tempd[i].Data);
  1996. dr[$"{tdata.Key}-{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1997. }
  1998. if (dataList.Count > 0)
  1999. dr[$"{tdata.Key}均值"] = dataList.Average().ToString("0.0000");
  2000. else
  2001. dr[$"{tdata.Key}均值"] = "0";
  2002. }
  2003. dr["堵孔数量"] = item.DKCount;
  2004. dr["脏污数量"] = item.ZWCount;
  2005. dr["钢丝异常数量"] = item.GSYCCount;
  2006. dr["纤维丝数量"] = item.XWSCount;
  2007. dr["缺口数量"] = item.QKCount;
  2008. dr["针孔数量"] = item.ZKCount;
  2009. dr["泡泡数量"] = item.PPCount;
  2010. dr["划伤数量"] = item.HSCount;
  2011. dr["压线数量"] = item.YXCount;
  2012. dr["斜边数量"] = item.XBCount;
  2013. dr["格栅数量"] = item.SXCount;
  2014. dr["断栅数量"] = item.DSCount;
  2015. dr["钢丝断裂数量"] = item.GSDLCount;
  2016. dr["残胶堵孔数量"] = item.CJDKCount;
  2017. dt.Rows.Add(dr);//在表的对象的行里添加此行
  2018. }
  2019. try
  2020. {
  2021. // 创建一个新的CSV文件并写入数据
  2022. using (StreamWriter writer = new StreamWriter(filePath, false, UnicodeEncoding.GetEncoding("GB2312")))
  2023. {
  2024. // 写入CSV文件的标题行
  2025. for (int i = 0; i < dt.Columns.Count; i++)
  2026. {
  2027. writer.Write(dt.Columns[i].ColumnName + ",");
  2028. }
  2029. writer.Write("\r\n");
  2030. for (int i = 0; i < dt.Rows.Count; i++)
  2031. {
  2032. // 写入数据行
  2033. for (int j = 0; j < dt.Columns.Count; j++)
  2034. {
  2035. writer.Write(dt.Rows[i][j] + ",");
  2036. }
  2037. writer.Write("\r\n");
  2038. //Console.WriteLine("CSV文件写入成功!");
  2039. }
  2040. }
  2041. }
  2042. catch (Exception ex)
  2043. {
  2044. MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2045. }
  2046. return;
  2047. }
  2048. private void skinButton1_Click(object sender, EventArgs e)
  2049. {
  2050. DataTable dt = (DataTable)dataGridView1.DataSource;
  2051. if (dt.Rows.Count > 0)
  2052. {
  2053. SaveFileDialog fileDialog = new SaveFileDialog();
  2054. //fileDialog.Filter = "数据文件(*.csv)|*.csv";
  2055. fileDialog.Filter = "数据文件(*.xlsx)|*.xlsx";
  2056. fileDialog.Title = "保存数据";
  2057. //保存对话框是否记忆上次打开的目录
  2058. fileDialog.RestoreDirectory = true;
  2059. if (fileDialog.ShowDialog() == DialogResult.OK)
  2060. {
  2061. try
  2062. {
  2063. string filePath = fileDialog.FileName; // CSV文件路径
  2064. List<Point> pt;
  2065. DataTable tdt = GetExcelTabel(out pt);
  2066. OutputAsExcelFile(tdt, filePath, pt);
  2067. //ShowAllDataTableEx(filePath);
  2068. MessageBox.Show("数据导出成功!" , "完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
  2069. }
  2070. catch (Exception ex)
  2071. {
  2072. MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2073. }
  2074. }
  2075. }
  2076. }
  2077. #endregion
  2078. private void btnClear_Click(object sender, EventArgs e)
  2079. {
  2080. cbProductCode.Text = "";
  2081. }
  2082. }
  2083. }