革博士V2程序
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

473 líneas
22 KiB

  1. using LeatherApp.Device;
  2. using LeatherApp.Interface;
  3. using Models;
  4. using Newtonsoft.Json.Linq;
  5. using Sunny.UI;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.ComponentModel;
  9. using System.Data;
  10. using System.Drawing;
  11. using System.IO;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Windows.Forms;
  16. namespace LeatherApp.Page
  17. {
  18. public partial class FProductInfo : UIPage
  19. {
  20. private Service.ProductService service=new Service.ProductService();
  21. private Models.Product model = new Models.Product();
  22. public FProductInfo()
  23. {
  24. InitializeComponent();
  25. #region dataGridView设置
  26. uiDataGridView1.AllowUserToAddRows = uiDataGridView1.AllowUserToDeleteRows = false;//用户添加删除行
  27. uiDataGridView2.AllowUserToAddRows = uiDataGridView2.AllowUserToDeleteRows = false;
  28. uiDataGridView1.AllowUserToResizeRows = uiDataGridView2.AllowUserToResizeRows=false;//用户调整行大小
  29. //dataGridView1.AllowUserToResizeColumns = false;//用户调整列大小
  30. //显示行号与列宽度自动调整
  31. uiDataGridView1.RowHeadersVisible = uiDataGridView2.RowHeadersVisible = true;
  32. uiDataGridView1.RowHeadersWidth = uiDataGridView2.RowHeadersWidth = 50;
  33. uiDataGridView1.ColumnHeadersHeightSizeMode = uiDataGridView2.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
  34. uiDataGridView1.RowHeadersWidthSizeMode = uiDataGridView2.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;//数据量过百绑定太变
  35. //dataGridView1.RowPostPaint += (sender, e) =>//序号列头
  36. //{
  37. // //Utils.Util.showRowNum_onDataGrid_RowPostPaint(this.dataGridView1, sender, e);
  38. // Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dataGridView1.RowHeadersWidth - 4, e.RowBounds.Height);
  39. // TextRenderer.DrawText(e.Graphics, (e.RowIndex * 0.25f).ToString(), dataGridView1.RowHeadersDefaultCellStyle.Font, rectangle, dataGridView1.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
  40. //};
  41. //for (int i = 0; i < dataGridView1.Columns.Count; i++)//禁止点击列头排序
  42. // dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
  43. ////行列交叉处标题
  44. //if (dataGridView1.RowHeadersVisible) dataGridView1.TopLeftHeaderCell.Value = "SPH/CYL";
  45. #endregion
  46. initData();
  47. }
  48. private void initData()
  49. {
  50. //var lstMaterial = Config.materialNameList.Select(x => new { code = x.Value<string>("code"), name = x.Value<string>("name") }).ToList();
  51. //cmbMaterial.ValueMember = "code";
  52. //cmbMaterial.DisplayMember = "name";
  53. //cmbMaterial.DataSource = lstMaterial;
  54. //cmbMaterial.SelectedIndex = -1;
  55. var lstColor = Config.colorNameList.Select(x => new { code = x.Value<int>("code"),name = x.Value<string>("name") }).ToList();
  56. cmbColor.ValueMember = "code";
  57. cmbColor.DisplayMember = "name";
  58. cmbColor.DataSource = lstColor;
  59. cmbColor.SelectedIndex = -1;
  60. //
  61. var filePathList = Directory.GetFiles(Application.StartupPath + "\\models\\", "*.trt");//*.onnx,
  62. string[] onlyNameList=new string[filePathList.Length];
  63. for (int i = 0; i < filePathList.Length; i++)
  64. onlyNameList[i]=Path.GetFileName(filePathList[i]);
  65. this.cmbModelName.Items.AddRange(onlyNameList);
  66. //
  67. ABSCamerCardDev devCamer1;
  68. if (Config.Camer_Name == CamerDevNameEnum.海康)
  69. devCamer1 = new CamerCardDev();
  70. else
  71. devCamer1 = new CamerCardDevIK();
  72. var value = devCamer1.getFeatureRangeValue("ExposureTime");
  73. if (value.Length > 0)
  74. {
  75. this.tcbarExposureTime.Minimum = (int)value[0];
  76. this.tcbarExposureTime.Maximum = (int)value[1];
  77. }
  78. value = devCamer1.getFeatureRangeValue("Gain");
  79. if (value.Length > 0)
  80. {
  81. this.tcbarGain.Minimum = (int)value[0];
  82. this.tcbarGain.Maximum = (int)value[1];
  83. }
  84. //
  85. clear(true);
  86. }
  87. private void loadProduct(int id,bool resetAll=false)
  88. {
  89. model = service.GetModelNav(id);
  90. if(model == null)
  91. {
  92. clear(resetAll);
  93. return;
  94. }
  95. loadProduct();
  96. }
  97. /// <summary>
  98. /// 对外,生产页面不存在的CODE进行添加
  99. /// </summary>
  100. /// <param name="pcode"> //PX-6</param>
  101. /// <returns></returns>
  102. public void loadProduct(string pcode, bool resetAll = false)
  103. {
  104. model = service.GetModelNav(pcode);
  105. if (model == null)
  106. {
  107. clear(resetAll);
  108. string[] codes= pcode.Split('-');
  109. if (codes[0]=="0" || Config.SuedeList.Contains(codes[0]))
  110. this.rbMaterial0.Checked = true;
  111. else if (codes[0] == "1")
  112. this.rbMaterial1.Checked = true;
  113. else if (codes[0] == "2")
  114. this.rbMaterial2.Checked = true;
  115. else if (codes[0] == "3")
  116. this.rbMaterial3.Checked = true;
  117. else if (codes[0] == "4")
  118. this.rbMaterial4.Checked = true;
  119. else if (codes[0] == "5")
  120. this.rbMaterial5.Checked = true;
  121. this.cmbColor.SelectedValue = int.Parse(codes[1]);
  122. }
  123. else
  124. loadProduct();
  125. }
  126. private double ContrastLow = 0.8;
  127. private double ContrastTop = 1.2;
  128. /// <summary>
  129. /// 获取对比度百分比 0-100 对应0.6-1.4
  130. /// </summary>
  131. /// <param name="val"></param>
  132. /// <returns></returns>
  133. private double ContrastToPercent(double val)
  134. {
  135. if (val < ContrastLow)
  136. return 0;
  137. else if (val > ContrastTop)
  138. return 100;
  139. double temp = 100 /(ContrastTop - ContrastLow) ;
  140. return Math.Round(temp * (val - ContrastLow),2);
  141. }
  142. private double PercentToContrast(double val)
  143. {
  144. double tt = 1;
  145. if (val > 100)
  146. tt = 100;
  147. else if (val < 0)
  148. tt = 0;
  149. else
  150. tt = val;
  151. double temp = tt / 100 * (ContrastTop - ContrastLow);
  152. return temp + ContrastLow;
  153. }
  154. private void loadProduct()
  155. {
  156. if (model == null) return;
  157. if(model.Material=="0")
  158. this.rbMaterial0.Checked = true;
  159. else if (model.Material == "1")
  160. this.rbMaterial1.Checked = true;
  161. else if (model.Material == "2")
  162. this.rbMaterial2.Checked = true;
  163. else if (model.Material == "3")
  164. this.rbMaterial3.Checked = true;
  165. else if (model.Material == "4")
  166. this.rbMaterial4.Checked = true;
  167. else if (model.Material == "5")
  168. this.rbMaterial5.Checked = true;
  169. this.cmbColor.SelectedValue = model.Color;
  170. tcbarLightValue.Value = model.LightValue;
  171. tcbarExposureTime.Value = (int)model.ExposureTime;
  172. tcbarGain.Value = (int)model.Gain;
  173. tcbarTensionValue.Value = (int)model.TensionValue;
  174. this.cmbModelName.Text = model.ModelName;
  175. numDefectAreaLimit.Text = model.DefectAreaLimit.ToString();
  176. numDefectCountLimit.Text = model.DefectCountLimit.ToString();
  177. swcDefectPauseForUser.Active = model.DefectPauseForUser;
  178. //uiDataGridView fill
  179. string code;
  180. QualifiedLimit item1;
  181. for (int i = 0; i < uiDataGridView1.Rows.Count; i++)
  182. {
  183. code = uiDataGridView1.Rows[i].Cells["col_code"].Value.ToString();
  184. item1 = model.QualifiedLimitList.FirstOrDefault(m=>m.Code == code);
  185. if (item1 != null)
  186. {
  187. uiDataGridView1.Rows[i].Cells["col_zxd"].Value=item1.ZXD;
  188. uiDataGridView1.Rows[i].Cells["col_area"].Value = item1.Area * 100;
  189. uiDataGridView1.Rows[i].Cells["col_contrast_top"].Value = ContrastToPercent(item1.ContrastTop);
  190. uiDataGridView1.Rows[i].Cells["col_contrast_lower"].Value = ContrastToPercent(item1.ContrastLower);
  191. uiDataGridView1.Rows[i].Cells["col_IsOR"].Value = item1.IsOR;
  192. //uiDataGridView1.Rows[i].Cells["col_Len"].Value = item1.DefectWarnLength;
  193. //uiDataGridView1.Rows[i].Cells["col_Cnt"].Value = item1.DefectWarnCnt;
  194. }
  195. }
  196. GradeLimit item2;
  197. for (int i = 0; i < uiDataGridView2.Rows.Count; i++)
  198. {
  199. code = uiDataGridView2.Rows[i].Cells["col2_code"].Value.ToString();
  200. item2 = model.GradeLimitList.FirstOrDefault(m => m.Code == code);
  201. if (item2 != null)
  202. {
  203. uiDataGridView2.Rows[i].Cells["col2_1"].Value = item2.A;
  204. uiDataGridView2.Rows[i].Cells["col2_2"].Value = item2.B;
  205. uiDataGridView2.Rows[i].Cells["col2_3"].Value = item2.C;
  206. uiDataGridView2.Rows[i].Cells["col2_4"].Value = item2.D;
  207. uiDataGridView2.Rows[i].Cells["col2_5"].Value = item2.E;
  208. }
  209. }
  210. //
  211. this.btnSave.Visible = this.btnReload.Visible = true;
  212. }
  213. private void clear(bool resetAll=false)
  214. {
  215. model = new Models.Product();
  216. if (resetAll)
  217. {
  218. rbMaterial0.Checked=rbMaterial1.Checked=false;
  219. cmbColor.SelectedIndex = -1;
  220. }
  221. tcbarLightValue.Value = tcbarExposureTime.Value = tcbarGain.Value = tcbarTensionValue.Value=0;
  222. //cmbModelName.SelectedIndex = -1;
  223. numDefectAreaLimit.Text =numDefectCountLimit.Text= "0";
  224. swcDefectPauseForUser.Active = true;
  225. this.btnSave.Visible = true;
  226. this.btnReload.Visible = false;
  227. //
  228. uiDataGridView1.Rows.Clear();
  229. uiDataGridView2.Rows.Clear();
  230. string code, name;
  231. //===uiDataGridView1
  232. //加列
  233. //uiDataGridView1.Columns.Add("col_code", "code");
  234. //uiDataGridView1.Columns.Add("col_zxd", "置信度");
  235. //uiDataGridView1.Columns.Add("col_area", "面积");
  236. //uiDataGridView1.Columns.Add("col_contrast", "对比度");
  237. //禁止点击列头排序
  238. //uiDataGridView1.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable;
  239. uiDataGridView1.Columns[0].Visible = false;
  240. //加行
  241. foreach (JObject item in Config.defectItemList)
  242. {
  243. code = item.Value<string>("code");
  244. name = item.Value<string>("name");
  245. //color = item.Value<string>("color");
  246. uiDataGridView1.Rows.Add();
  247. uiDataGridView1.Rows[uiDataGridView1.RowCount - 1].HeaderCell.Value = name;
  248. uiDataGridView1[0, uiDataGridView1.RowCount - 1].Value = code;
  249. }
  250. //===uiDataGridView2
  251. //加列
  252. //uiDataGridView2.Columns.Add("col_code", "code");
  253. //uiDataGridView2.Columns.Add("col_1", "A");
  254. //uiDataGridView2.Columns.Add("col_2", "B");
  255. //uiDataGridView2.Columns.Add("col_3", "C");
  256. //uiDataGridView2.Columns.Add("col_4", "D");
  257. //uiDataGridView2.Columns.Add("col_5", "E");
  258. //禁止点击列头排序
  259. //uiDataGridView2.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable;
  260. uiDataGridView2.Columns[0].Visible = false;
  261. //加行
  262. foreach (JObject item in Config.defectItemList)
  263. {
  264. code = item.Value<string>("code");
  265. name = item.Value<string>("name");
  266. //color = item.Value<string>("color");
  267. uiDataGridView2.Rows.Add();
  268. uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].HeaderCell.Value = name;
  269. uiDataGridView2[0, uiDataGridView2.RowCount - 1].Value = code;
  270. }
  271. }
  272. private void FProductInfo_Initialize(object sender, EventArgs e)
  273. {
  274. }
  275. private void btnNew_Click(object sender, EventArgs e)
  276. {
  277. this.clear();
  278. }
  279. private void btnReload_Click(object sender, EventArgs e)
  280. {
  281. try
  282. {
  283. this.loadProduct(model.Id,true);
  284. }
  285. catch (Exception ex)
  286. {
  287. UIMessageTip.ShowError(ex.Message, 2000);
  288. }
  289. }
  290. private void btnSave_Click(object sender, EventArgs e)
  291. {
  292. try
  293. {
  294. if (!this.rbMaterial0.Checked && !rbMaterial1.Checked
  295. && !rbMaterial2.Checked && !rbMaterial3.Checked
  296. && !rbMaterial4.Checked && !rbMaterial5.Checked
  297. ) throw new Exception("请选择材质!");
  298. if (this.cmbColor.SelectedIndex < 0) throw new Exception("请选择颜色!");
  299. if (this.cmbModelName.SelectedIndex < 0) throw new Exception("请选择模型!");
  300. model.Material = GetMaterialIndex();
  301. model.Color = (int)cmbColor.SelectedValue;
  302. model.Code = model.Material+"-"+ model.Color;
  303. model.LightValue = tcbarLightValue.Value;
  304. model.TensionValue = tcbarTensionValue.Value;
  305. model.ExposureTime = tcbarExposureTime.Value;
  306. model.Gain = tcbarGain.Value;
  307. model.ModelName = this.cmbModelName.Text.Trim();
  308. model.DefectAreaLimit = double.Parse(numDefectAreaLimit.Text.Trim());
  309. model.DefectCountLimit = int.Parse(numDefectCountLimit.Text.Trim());
  310. model.DefectPauseForUser = swcDefectPauseForUser.Active;
  311. //datagrid
  312. if (model.QualifiedLimitList == null)
  313. model.QualifiedLimitList = new List<Models.QualifiedLimit>();
  314. else
  315. model.QualifiedLimitList.Clear();
  316. QualifiedLimit qualifiedLimit = new QualifiedLimit();
  317. for (int i=0;i< uiDataGridView1.Rows.Count;i++ )
  318. {
  319. qualifiedLimit = new Models.QualifiedLimit()
  320. {
  321. Code = uiDataGridView1.Rows[i].Cells["col_code"].Value.ToString(),
  322. ZXD = Utils.Util.IsDecimal(uiDataGridView1.Rows[i].Cells["col_zxd"].Value) ? Convert.ToDouble(uiDataGridView1.Rows[i].Cells["col_zxd"].Value) : 0,
  323. Area = Utils.Util.IsDecimal(uiDataGridView1.Rows[i].Cells["col_area"].Value) ? Convert.ToDouble(uiDataGridView1.Rows[i].Cells["col_area"].Value) / 100 : 0,
  324. ContrastLower = Utils.Util.IsDecimal(uiDataGridView1.Rows[i].Cells["col_contrast_lower"].Value) ? PercentToContrast(Convert.ToDouble(uiDataGridView1.Rows[i].Cells["col_contrast_lower"].Value)) : 0,
  325. ContrastTop = Utils.Util.IsDecimal(uiDataGridView1.Rows[i].Cells["col_contrast_top"].Value) ? PercentToContrast(Convert.ToDouble(uiDataGridView1.Rows[i].Cells["col_contrast_top"].Value)) : 0,
  326. IsOR = Convert.ToBoolean(uiDataGridView1.Rows[i].Cells["col_IsOR"].Value),
  327. //DefectWarnLength = Utils.Util.IsDecimal(uiDataGridView1.Rows[i].Cells["col_Len"].Value) ? (int)Convert.ToDouble(uiDataGridView1.Rows[i].Cells["col_Len"].Value) : 0,
  328. //DefectWarnCnt = Utils.Util.IsDecimal(uiDataGridView1.Rows[i].Cells["col_Cnt"].Value) ? (int)Convert.ToDouble(uiDataGridView1.Rows[i].Cells["col_Cnt"].Value) : 0,
  329. ModifyUserCode = Config.loginUser.Code,
  330. CreateUserCode = Config.loginUser.Code
  331. };
  332. if (qualifiedLimit.ContrastLower + qualifiedLimit.ContrastTop > 0 && qualifiedLimit.ContrastTop < qualifiedLimit.ContrastLower)
  333. throw new Exception($"检测标准中第{i+1}行中对比度上限值({ContrastToPercent(qualifiedLimit.ContrastTop)})不可小于下限值({ContrastToPercent(qualifiedLimit.ContrastLower)})!");
  334. model.QualifiedLimitList.Add(qualifiedLimit);
  335. }
  336. //
  337. if (model.GradeLimitList == null)
  338. model.GradeLimitList = new List<Models.GradeLimit>();
  339. else
  340. model.GradeLimitList.Clear();
  341. for (int i = 0; i < uiDataGridView2.Rows.Count; i++)
  342. {
  343. model.GradeLimitList.Add(
  344. new Models.GradeLimit()
  345. {
  346. Code = uiDataGridView2.Rows[i].Cells["col2_code"].Value.ToString(),
  347. A = Utils.Util.IsNumber(uiDataGridView2.Rows[i].Cells["col2_1"].Value)? Convert.ToInt32(uiDataGridView2.Rows[i].Cells["col2_1"].Value) : 0,
  348. B = Utils.Util.IsNumber(uiDataGridView2.Rows[i].Cells["col2_2"].Value) ? Convert.ToInt32(uiDataGridView2.Rows[i].Cells["col2_2"].Value) : 0,
  349. C = Utils.Util.IsNumber(uiDataGridView2.Rows[i].Cells["col2_3"].Value) ? Convert.ToInt32(uiDataGridView2.Rows[i].Cells["col2_3"].Value) : 0,
  350. D = Utils.Util.IsNumber(uiDataGridView2.Rows[i].Cells["col2_4"].Value) ? Convert.ToInt32(uiDataGridView2.Rows[i].Cells["col2_4"].Value) : 0,
  351. E = Utils.Util.IsNumber(uiDataGridView2.Rows[i].Cells["col2_5"].Value) ? Convert.ToInt32(uiDataGridView2.Rows[i].Cells["col2_5"].Value) : 0,
  352. ModifyUserCode = Config.loginUser.Code,
  353. CreateUserCode = Config.loginUser.Code
  354. });
  355. }
  356. //
  357. model.ModifyUserCode = Config.loginUser.Code;
  358. bool result;
  359. if (model.Id == 0)
  360. {
  361. model.CreateUserCode = Config.loginUser.Code;
  362. result = service.InsertNav(model);
  363. }
  364. else
  365. {
  366. result = service.UpdateNav(model);
  367. }
  368. if (!result)
  369. throw new Exception("保存失败!");
  370. this.btnReload.Visible = true;
  371. UIMessageTip.ShowOk("保存成功!", 1000);
  372. }
  373. catch (Exception ex)
  374. {
  375. UIMessageTip.ShowError(ex.Message, 2000);
  376. }
  377. }
  378. //
  379. private void tcbarLightValue_ValueChanged(object sender, EventArgs e)
  380. {
  381. lblLightValue.Text = $"{tcbarLightValue.Value}/{tcbarLightValue.Maximum}";
  382. }
  383. private void tcbarExposureTime_ValueChanged(object sender, EventArgs e)
  384. {
  385. lblExposureTime.Text = $"{tcbarExposureTime.Value}/{tcbarExposureTime.Maximum}";
  386. }
  387. private void tcbarGainValue_ValueChanged(object sender, EventArgs e)
  388. {
  389. lblGain.Text = $"{tcbarGain.Value}/{tcbarGain.Maximum}";
  390. }
  391. private void tcbarTensionValue_ValueChanged(object sender, EventArgs e)
  392. {
  393. lblTensionValue.Text = $"{tcbarTensionValue.Value}/{tcbarTensionValue.Maximum}";
  394. }
  395. private void button1_Click(object sender, EventArgs e)
  396. {
  397. this.clear(true);
  398. }
  399. string GetMaterialIndex()
  400. {
  401. if (this.rbMaterial0.Checked)
  402. return "0";
  403. else if (this.rbMaterial1.Checked)
  404. return "1";
  405. else if (this.rbMaterial2.Checked)
  406. return "2";
  407. else if (this.rbMaterial3.Checked)
  408. return "3";
  409. else if (this.rbMaterial4.Checked)
  410. return "4";
  411. else
  412. return "5";
  413. }
  414. private void cmbMaterial_SelectedIndexChanged(object sender, EventArgs e)
  415. {
  416. //if (this.cmbMaterial.SelectedIndex < 0 || this.cmbColor.SelectedIndex < 0)
  417. // return;
  418. if ((!this.rbMaterial0.Checked && !this.rbMaterial1.Checked && !this.rbMaterial2.Checked
  419. && !this.rbMaterial3.Checked && !this.rbMaterial4.Checked && !this.rbMaterial5.Checked)
  420. || this.cmbColor.SelectedIndex < 0)
  421. return;
  422. this.loadProduct(GetMaterialIndex() + "-" + this.cmbColor.SelectedValue.ToString());
  423. }
  424. private void btnDefectOption_Click(object sender, EventArgs e)
  425. {
  426. if (this.model == null || this.model.Id==0)
  427. return;
  428. FSelDefect frm = new FSelDefect(model.DefectPauseOption);
  429. frm.Render();
  430. frm.Text = "选择瑕疵";
  431. frm.ShowDialog();
  432. if (frm.IsOK)
  433. {
  434. model.DefectPauseOption = frm.lstCodes;
  435. }
  436. frm.Dispose();
  437. }
  438. private void swcDefectPauseForUser_ValueChanged(object sender, bool value)
  439. {
  440. btnDefectOption.Enabled = swcDefectPauseForUser.Active;
  441. }
  442. }
  443. }