FinalCheckGControl.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607
  1.  using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Drawing;
  5. using System.Linq;
  6. using System.Windows.Forms;
  7. using System.Windows.Input;
  8. using Core.Mes.Client.Comm.Format;
  9. using Core.Mes.Client.Comm.Server;
  10. using Core.Mes.Client.Comm.Tool;
  11. using Core.StlMes.Client.Mcp.Control.Common;
  12. using Core.StlMes.Client.Mcp.Control.Entity;
  13. using CoreFS.CA06;
  14. using Infragistics.Win;
  15. using Infragistics.Win.UltraWinGrid;
  16. using NPOI.SS.Formula.Functions;
  17. namespace Core.StlMes.Client.Mcp.Control.Machining
  18. {
  19. public partial class FinalCheckGControl : UserControl
  20. {
  21. protected List<HttSignatureEntity> Names = new List<HttSignatureEntity>();
  22. protected string _plineCode = "";
  23. public FinalCheckGControl()
  24. {
  25. InitializeComponent();
  26. EntityHelper.ShowGridCaption<MchFinalCheckGTotal>(ultraGrid1.DisplayLayout.Bands[0]);
  27. //commHelper.RefreshAndAutoSizeExceptColumns(ultraGrid1, "UnPass");
  28. var list = new ValueList();
  29. list.ValueListItems.Add(new ValueListItem("0", "合格"));
  30. list.ValueListItems.Add(new ValueListItem("1", "不合"));
  31. list.ValueListItems.Add(new ValueListItem("2", "废品"));
  32. ultraGrid1.DisplayLayout.Bands[0].Columns["Station"].ValueList = list;
  33. }
  34. private OpeBase ob;
  35. private string BatchNo = "";
  36. //是否有喷印管号
  37. private bool isMeasureData = false;
  38. public void Init(OpeBase _ob)
  39. {
  40. ultraGrid1.DisplayLayout.Override.AllowRowFiltering = DefaultableBoolean.False;
  41. ultraGrid1.DisplayLayout.Override.HeaderClickAction = HeaderClickAction.Default;
  42. ob = _ob;
  43. }
  44. private List<PortMchBatchSampleResultEntity> _portHttBatchSampleResultEntitys;
  45. private List<PortMchBatchSampleResultEntity> _UncheckPort;
  46. private List<PortMchBatchSampleResultEntity> _checkPort;
  47. public List<PortMchBatchSampleResultEntity> ProMchPort
  48. {
  49. get
  50. {
  51. return _checkPort;
  52. }
  53. }
  54. public List<MchFinalCheckGTotal> Detail { get; private set; }
  55. private MchFinalCheckResultEntity Data;
  56. public MchFinalCheckResultEntity GetData()
  57. {
  58. if(Data==null) Data=new MchFinalCheckResultEntity();
  59. Data.ProNum = ProMchPort.Count;
  60. Data.ProWt = ProMchPort.Sum(p => p.ActWeight);
  61. Data.CheckNum = Detail.Where(p=>!string.IsNullOrWhiteSpace(p.SizeCheck)).Select(p=>p.MatNo).Distinct().Count();
  62. Data.CheckWt = ProMchPort.Where(p => Detail.Any(q=>!string.IsNullOrWhiteSpace(q.SizeCheck) && q.MatNo==p.MatNo)).Sum(p => p.ActWeight);
  63. Data.ProShift = uceBc.Value.ToString2();
  64. Data.ProGroup = uceBz.Value.ToString2();
  65. Data.ProTime = udeProData.Value.ToString2();
  66. Data.ProUser = txtUserName.Text;
  67. Data.UnqualifiedNum = Detail.Where(p => p.Station == "1").Select(p => p.MatNo).Distinct().Count();
  68. Data.UnqualifiedWt = ProMchPort.Where(p => Detail.Any(q => q.MatNo == p.MatNo && q.Station == "1")).Sum(p => p.ActWeight);
  69. Data.FailNum = Detail.Where(p => p.Station == "2").Select(p => p.MatNo).Distinct().Count();
  70. Data.FailWt = ProMchPort.Where(p => Detail.Any(q => q.MatNo == p.MatNo && q.Station == "2")).Sum(p => p.ActWeight);
  71. Data.QualifiedNum = Data.CheckNum - Data.UnqualifiedNum;
  72. Data.QualifiedWt = Data.CheckWt - Data.UnqualifiedWt;
  73. Data.ResultType = "0";
  74. return Data;
  75. }
  76. public void SetValue(MchFinalCheckResultEntity value, List<PortMchBatchSampleResultEntity> port )
  77. {
  78. Data = value;
  79. isMeasureData = port.Any(p => p.MeasuringSeq != null);
  80. _portHttBatchSampleResultEntitys = isMeasureData ?
  81. port.Where(p => (p.MatStatus == "合格" || p.MatStatus == "待处理") && p.MeasuringSeq != null ).OrderBy(p => p.MeasuringSeq).ToList() :
  82. port.Where(p => (p.MatStatus == "合格" || p.MatStatus == "待处理")).OrderBy(p => p.MatNo).ToList();
  83. _UncheckPort = _portHttBatchSampleResultEntitys.Where(p => p.IsFinalcheck == "0").ToList();
  84. txtUserName.Text = Data.ProUser;
  85. uceBc.Value = Data.ProShift;
  86. uceBz.Value = Data.ProGroup;
  87. _checkPort = new List<PortMchBatchSampleResultEntity>();
  88. udeProData.Value = DateTime.Now;
  89. if (_UncheckPort.Any())
  90. {
  91. if (isMeasureData)
  92. {
  93. txtProStart.Value = _UncheckPort.Min(p => p.MeasuringSeq).ToString2();
  94. txtProEnd.Value = _UncheckPort.Max(p => p.MeasuringSeq).ToString2();
  95. }
  96. else
  97. {
  98. int checkNum = _portHttBatchSampleResultEntitys.TakeWhile(p => p.IsFinalcheck != "0").Count();
  99. txtProStart.Value = checkNum + 1;
  100. txtProEnd.Value = _UncheckPort.Count + checkNum;
  101. }
  102. }
  103. else
  104. {
  105. txtProStart.Value = 1;
  106. txtProEnd.Value = 1;
  107. }
  108. Detail = new List<MchFinalCheckGTotal>();
  109. mchFinalCheckTotalBindingSource.DataSource = Detail;
  110. if (_plineCode != value.PlineCode)
  111. {
  112. Names = EntityHelper.GetData<HttSignatureEntity>(
  113. "com.steering.mes.mcp.heatTreatment.FrmHttCrackDetectResult.getHttSign",
  114. new object[] { value.PlineCode, "12" }, ob);
  115. txtUserName.DisplayMember = "UserName";
  116. txtUserName.ValueMember = "UserName";
  117. _plineCode = value.PlineCode;
  118. txtUserName.DataSource = Names;
  119. }
  120. ultraGrid1.DisplayLayout.Bands[0].Summaries[0].DisplayFormat = "送检0支";
  121. ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸抽检率 0%";
  122. }
  123. private void ultraGrid1_CellChange(object sender, CellEventArgs e)
  124. {
  125. }
  126. private void uteUnpass_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
  127. {
  128. MchFinalCheckGTotal entity = ultraGrid1.ActiveRow.ListObject as MchFinalCheckGTotal;
  129. bool Fail = ultraGrid1.ActiveCell.Column.Key == "ScrapReason";
  130. var matfrm = new ReasonChooseNew(ob,string.IsNullOrWhiteSpace(entity.SizeCheck)?"703601": "7036", Fail, Fail ? entity.ScrapList : entity.UnPassList);
  131. matfrm.ShowDialog();
  132. if (matfrm.DialogResult == DialogResult.OK)
  133. {
  134. if (Fail)
  135. {
  136. entity.ScrapList = matfrm.FailData;
  137. entity.ScrapList.ForEach(p =>
  138. {
  139. p.MatNo = entity.MatNo;
  140. p.FailNum = 1;
  141. p.FailWt = _checkPort.Where(q => q.MatNo == p.MatNo).Sum(q => q.ActWeight);
  142. p.BatchNo = Data.BatchNo;
  143. p.HeatPlanNo = Data.HeatPlanNo;
  144. });
  145. }
  146. else
  147. {
  148. entity.UnPassList = matfrm.FailData;
  149. entity.UnPassList.ForEach(p =>
  150. {
  151. p.MatNo = entity.MatNo;
  152. p.FailNum = 1;
  153. p.FailWt = _checkPort.Where(q => q.MatNo == p.MatNo).Sum(q => q.ActWeight);
  154. p.BatchNo = Data.BatchNo;
  155. p.HeatPlanNo = Data.HeatPlanNo;
  156. });
  157. }
  158. entity.Station = entity.ScrapList.Any() ? "2" : entity.UnPassList.Any() ? "1" : "0";
  159. if (entity.Station == "1" || entity.Station =="2")
  160. {
  161. ultraGrid1.ActiveCell.Row.Cells["Station"].Appearance.BackColor = Color.Red;
  162. }
  163. else
  164. {
  165. ultraGrid1.ActiveCell.Row.Cells["Station"].Appearance.ResetBackColor();
  166. }
  167. if (entity.Station == "2")
  168. {
  169. entity.UnPassList = new List<MchBugDEntity>();
  170. }
  171. ultraGrid1.PerformAction(UltraGridAction.ExitEditMode);
  172. mchFinalCheckTotalBindingSource.ResetBindings(false);
  173. ultraGrid1.UpdateData();
  174. }
  175. }
  176. private void txtDir_KeyPress(object sender, KeyPressEventArgs e)
  177. {
  178. if (e.KeyChar ==13)
  179. {
  180. btnSizeAdd_Click(null, null);
  181. }
  182. }
  183. private void ultraGrid1_InitializeRowsCollection(object sender, InitializeRowsCollectionEventArgs e)
  184. {
  185. foreach (var ultraGridRow in e.Rows)
  186. {
  187. if (ultraGridRow.Cells["Station"].Value.ToString2() == "1")
  188. {
  189. ultraGridRow.Cells["Station"].Appearance.BackColor = Color.Red;
  190. }
  191. else if (ultraGridRow.Cells["Station"].Value.ToString2() == "2")
  192. {
  193. ultraGridRow.Cells["Station"].Appearance.BackColor = Color.Red;
  194. }
  195. else
  196. {
  197. ultraGridRow.Cells["Station"].Appearance.ResetBackColor();
  198. }
  199. }
  200. }
  201. private void btnCheck_Click(object sender, EventArgs e)
  202. {
  203. int Start = 0;
  204. int Frequency = 0;
  205. if (!int.TryParse(txtStart.Value.ToString3(), out Start) || Start <= 0)
  206. {
  207. MessageBox.Show("请输入正确的起始管号");
  208. return;
  209. }
  210. if (!int.TryParse(uceFrequency.Text, out Frequency) && Frequency <= 0)
  211. {
  212. MessageBox.Show("请输入正确的抽取频率");
  213. return;
  214. }
  215. for (int i = 0, j = Start - 1; j < Detail.Count; j = (++i) * Frequency + Start - 1)
  216. {
  217. Detail[j].SizeCheck = "√";
  218. }
  219. mchFinalCheckTotalBindingSource.DataSource = Detail;
  220. int CheckNum = Detail.Count(p => p.SizeCheck == "√");
  221. ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸检查 " + CheckNum + "支 抽检率 " +(Detail.Count==0? 0: CheckNum * 100 / Detail.Count )+ "%";
  222. }
  223. private void cmsCopy_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  224. {
  225. ultraGrid1.UpdateData();
  226. if ( ultraGrid1.ActiveRow == null)
  227. {
  228. return;
  229. }
  230. MchFinalCheckGTotal entity;
  231. if (ultraGrid1.ActiveRow.HasParent())
  232. {
  233. entity = ultraGrid1.ActiveRow.ParentRow.ListObject as MchFinalCheckGTotal;
  234. }
  235. else
  236. {
  237. entity = ultraGrid1.ActiveRow.ListObject as MchFinalCheckGTotal;
  238. }
  239. if (e.ClickedItem.Name == "tmsCopyToAll")
  240. {
  241. List<MchFinalCheckGTotal> list = mchFinalCheckTotalBindingSource.DataSource as List<MchFinalCheckGTotal>;
  242. list
  243. .ForEach(
  244. p =>
  245. {
  246. p.ScrapList = entity.ScrapList.Select(q =>
  247. {
  248. MchBugDEntity bug = q.Clone();
  249. bug.MatNo = p.MatNo;
  250. return bug;
  251. }).ToList();
  252. p.UnPassList = entity.UnPassList.Select(q =>
  253. {
  254. MchBugDEntity bug = q.Clone();
  255. bug.MatNo = p.MatNo;
  256. return bug;
  257. }).ToList();
  258. p.Station = entity.Station;
  259. });
  260. mchFinalCheckTotalBindingSource.ResetBindings(false);
  261. ultraGrid1.UpdateData();
  262. ultraGrid1.Rows.ToList().ForEach(
  263. p =>
  264. {
  265. if (p.Cells["Station"].Value.ToString2() == "1")
  266. {
  267. p.Cells["Station"].Appearance.BackColor = Color.Red;
  268. }
  269. else if (p.Cells["Station"].Value.ToString2() == "2")
  270. {
  271. p.Cells["Station"].Appearance.BackColor = Color.Red;
  272. }
  273. else
  274. {
  275. p.Cells["Station"].Appearance.ResetBackColor();
  276. }
  277. }
  278. );
  279. }
  280. else if (e.ClickedItem.Name == "tmsCopyToSize")
  281. {
  282. List<MchFinalCheckGTotal> list = mchFinalCheckTotalBindingSource.DataSource as List<MchFinalCheckGTotal>;
  283. list.Where(p=>!string.IsNullOrWhiteSpace(p.SizeCheck)).ToList()
  284. .ForEach(
  285. p =>
  286. {
  287. p.ScrapList = entity.ScrapList.Select(q =>
  288. {
  289. MchBugDEntity bug = q.Clone();
  290. bug.MatNo = p.MatNo;
  291. return bug;
  292. }).ToList();
  293. p.UnPassList = entity.UnPassList.Select(q =>
  294. {
  295. MchBugDEntity bug = q.Clone();
  296. bug.MatNo = p.MatNo;
  297. return bug;
  298. }).ToList();
  299. p.Station = entity.Station;
  300. });
  301. mchFinalCheckTotalBindingSource.ResetBindings(false);
  302. ultraGrid1.UpdateData();
  303. ultraGrid1.Rows.ToList().ForEach(
  304. p =>
  305. {
  306. if (p.Cells["Station"].Value.ToString2() == "1")
  307. {
  308. p.Cells["Station"].Appearance.BackColor = Color.Red;
  309. }
  310. else if (p.Cells["Station"].Value.ToString2() == "2")
  311. {
  312. p.Cells["Station"].Appearance.BackColor = Color.Red;
  313. }
  314. else
  315. {
  316. p.Cells["Station"].Appearance.ResetBackColor();
  317. }
  318. }
  319. );
  320. }
  321. }
  322. private void btnAdd_Click(object sender, EventArgs e)
  323. {
  324. List<PortMchBatchSampleResultEntity> NeedAdds = new List<PortMchBatchSampleResultEntity>();
  325. if (txtProStart.Value == null || txtProEnd.Value == null)
  326. {
  327. MessageBox.Show("请输入正确的管号区间");
  328. return;
  329. }
  330. int Start = int.Parse(txtProStart.Value.ToString3());
  331. int End = int.Parse(txtProEnd.Value.ToString3());
  332. if (Start > End)
  333. {
  334. MessageBox.Show("管号区间的开始管号不能大于结束管号");
  335. return;
  336. }
  337. if (!_UncheckPort.Any())
  338. {
  339. MessageBox.Show("无待检的管号!");
  340. return;
  341. }
  342. if (isMeasureData)
  343. {
  344. if (Start < _UncheckPort.Min(p => p.MeasuringSeq) || End > _UncheckPort.Max(p => p.MeasuringSeq))
  345. {
  346. MessageBox.Show("管号不存在");
  347. return;
  348. }
  349. NeedAdds = _UncheckPort.Where(
  350. p => p.MeasuringSeq >= Start && p.MeasuringSeq <= End && Detail.All(q => q.MatNo != p.MatNo)).ToList();
  351. }
  352. else
  353. {
  354. if (Start < _portHttBatchSampleResultEntitys.TakeWhile(p => p.IsFinalcheck != "0").Count() || End - Start > _UncheckPort.Count)
  355. {
  356. MessageBox.Show("管号不存在");
  357. return;
  358. }
  359. NeedAdds = _portHttBatchSampleResultEntitys.Skip(Start-1).Take(End-Start+1).Where(
  360. p => p.IsFinalcheck == "0" && Detail.All(q => q.MatNo != p.MatNo)).ToList();
  361. }
  362. /* int offlineCout = NeedAdds.Count(p => p.MatStatus == "待处理");
  363. if (offlineCout > 0)
  364. {
  365. MessageBox.Show("存在" + offlineCout + "支管已经离线");
  366. return;
  367. }*/
  368. foreach (var needAdd in NeedAdds)
  369. {
  370. Detail.Add(new MchFinalCheckGTotal()
  371. {
  372. MatNo = needAdd.MatNo,
  373. BarCode = needAdd.BarCode,
  374. MeasuringSeq = needAdd.MeasuringSeq,
  375. AppCheck = "√",
  376. Station = "0",
  377. ScrapList = new List<MchBugDEntity>(),
  378. UnPassList = new List<MchBugDEntity>()
  379. });
  380. }
  381. _checkPort.AddRange(NeedAdds);
  382. Detail = isMeasureData ? Detail.OrderBy(p => p.MeasuringSeq).ToList() : Detail.OrderBy(p => p.MatNo).ToList();
  383. mchFinalCheckTotalBindingSource.DataSource = Detail;
  384. ultraGrid1.DisplayLayout.Bands[0].Summaries[0].DisplayFormat = "送检 " + Detail.Count + "支 " + " 外观检查100%";
  385. int CheckNum = Detail.Count(p => p.SizeCheck == "√");
  386. ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸检查 " + CheckNum + "支 抽检率 " + CheckNum * 100 / Detail.Count + "%";
  387. }
  388. private void ultraGrid1_ClickCell(object sender, ClickCellEventArgs e)
  389. {
  390. if (e.Cell.Column.Key == "SizeCheck")
  391. {
  392. if (e.Cell.Value.ToString2() != "")
  393. {
  394. e.Cell.Row.Cells["SizeCheck"].Value = "";
  395. }
  396. else
  397. {
  398. e.Cell.Row.Cells["SizeCheck"].Value = "√";
  399. }
  400. ultraGrid1.UpdateData();
  401. int CheckNum = Detail.Count(p => p.SizeCheck == "√");
  402. ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸检查 " + CheckNum + "支 抽检率 " + (CheckNum * 100d / Detail.Count).ToString("0.00") + "%";
  403. }
  404. }
  405. private void btnClear_Click(object sender, EventArgs e)
  406. {
  407. Detail = new List<MchFinalCheckGTotal>();
  408. _checkPort = new List<PortMchBatchSampleResultEntity>();
  409. mchFinalCheckTotalBindingSource.DataSource = Detail;
  410. ultraGrid1.DisplayLayout.Bands[0].Summaries[0].DisplayFormat = "送检0支";
  411. ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸抽检率 0%";
  412. }
  413. private void btnClear2_Click(object sender, EventArgs e)
  414. {
  415. Detail.ForEach(P=>P.SizeCheck="");
  416. mchFinalCheckTotalBindingSource.DataSource = Detail;
  417. ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸检查 0支 抽检率 0%";
  418. }
  419. private void btnSizeAdd_Click(object sender, EventArgs e)
  420. {
  421. if (txtDir.Text == "")
  422. {
  423. MessageBox.Show("指定管号不能为空");
  424. return;
  425. }
  426. if (isMeasureData)
  427. {
  428. var dir = Detail.Where(p => p.MeasuringSeq.ToString2() == txtDir.Text).ToList();
  429. if (!dir.Any())
  430. {
  431. MessageBox.Show("找不到指定管号");
  432. return;
  433. }
  434. dir[0].SizeCheck = "√";
  435. }
  436. else
  437. {
  438. int dirNum = 0;
  439. if (!int.TryParse(txtDir.Text, out dirNum) || dirNum <= 0)
  440. {
  441. MessageBox.Show("请输入正确的管号");
  442. return;
  443. }
  444. if (dirNum >= Detail.Count)
  445. {
  446. MessageBox.Show("超出抽检管号范围");
  447. return;
  448. }
  449. Detail[dirNum - 1].SizeCheck = "√";
  450. }
  451. mchFinalCheckTotalBindingSource.DataSource = Detail;
  452. int CheckNum = Detail.Count(p => p.SizeCheck == "√");
  453. ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸检查 " + CheckNum + "支 抽检率 " + (CheckNum * 100d / Detail.Count).ToString("0.00") + "%";
  454. txtDir.SelectAll();
  455. }
  456. }
  457. }