FrmScrapMchNum.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.Linq;
  6. using System.Windows.Forms;
  7. using Core.Mes.Client.Comm.Format;
  8. using Core.Mes.Client.Comm.Server;
  9. using Core.Mes.Client.Comm.Tool;
  10. using Core.StlMes.Client.Mcp.Control;
  11. using Core.StlMes.Client.Mcp.Control.Entity;
  12. using CoreFS.CA06;
  13. using Infragistics.Win;
  14. using Infragistics.Win.UltraWinGrid;
  15. namespace CCore.StlMes.Client.Mcp.Control
  16. {
  17. public partial class FrmScrapMchNum : FrmBase
  18. {
  19. private List<string> SignOfflineMatNo = new DataSourceList<string>();
  20. private string _heatPlanNo;
  21. private string _batchNo;
  22. private string _gx;
  23. private string _userName;
  24. private string _shift;
  25. private string _group;
  26. private List<PortMchBatchSampleResultEntityWithCheck> list;
  27. public FrmScrapMchNum(OpeBase ob, string heatPlanNo, string BatchNo, string gx, string Username, string Shift, string Group)
  28. {
  29. InitializeComponent();
  30. this.ob = ob;
  31. SignOfflineMatNo = new DataSourceList<string>();
  32. _batchNo = BatchNo;
  33. _gx = gx;
  34. _userName = Username;
  35. _shift = Shift;
  36. _group = Group;
  37. _heatPlanNo = heatPlanNo;
  38. list = EntityHelper.GetData<PortMchBatchSampleResultEntityWithCheck>(
  39. "com.steering.mes.mcp.common.PlanService.getQueryJGPortVrphot", new object[] { heatPlanNo, BatchNo }, ob);
  40. mchOfflineResultEntityBindingSource.DataSource = new List<MchOfflineResultEntity>();
  41. EntityHelper.ShowGridCaption<PortMchBatchSampleResultEntityWithCheck>(ultraGridDetailDes1.DisplayLayout.Bands[1]);
  42. }
  43. public string alamNum = "";
  44. public string scrapNum = "";
  45. public string testOfflineNum = "";
  46. private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
  47. {
  48. switch (e.Tool.Key)
  49. {
  50. case "Save":
  51. Save();
  52. break;
  53. case "ShowLen": // ButtonTool
  54. ShowLen();
  55. break;
  56. case "Close":
  57. CloseFrm();
  58. break;
  59. }
  60. }
  61. private void ShowLen()
  62. {
  63. List<PortMchBatchSampleResultEntity> listSource = EntityHelper.GetData<PortMchBatchSampleResultEntity>(
  64. "com.steering.mes.mcp.Vrp.FrmMchInStore.doQueryVrpRack", new object[] { _heatPlanNo,"", _batchNo }, this.ob);
  65. if (!listSource.Any())
  66. {
  67. MessageBox.Show("无可离线管");
  68. return;
  69. }
  70. SignOfflineMatNo = new List<string>();
  71. List<MchOfflineResultEntity> Office = new List<MchOfflineResultEntity>();
  72. foreach (PortMchBatchSampleResultEntity entity in listSource)
  73. {
  74. decimal actmin = 0;
  75. decimal actmax = 0;
  76. decimal.TryParse(entity.ActLenMin, out actmin);
  77. decimal.TryParse(entity.ActLenMax, out actmax);
  78. MchOfflineResultEntity currentEntity = new MchOfflineResultEntity();
  79. currentEntity.HeatPlanNo = _heatPlanNo;
  80. currentEntity.BatchNo = _batchNo;
  81. currentEntity.ProUser = _userName;
  82. currentEntity.ProShift = _shift;
  83. currentEntity.ProGroup = _group;
  84. currentEntity.StationCode = _gx;
  85. currentEntity.ActLenMin = entity.ActLenMin;
  86. currentEntity.ActLenMax = entity.ActLenMax;
  87. currentEntity.PlineCode = list.Any() ? list[0].PlineCode : "";
  88. currentEntity.ListPortMarts =
  89. list.Select(p => p.Clone()).ToList();
  90. var listOk = currentEntity.ListPortMarts.Where(p => p.ActLen >= actmin && p.ActLen <= actmax).Where(p =>
  91. {
  92. if (p.InstoreFlag == "已入库" || p.MatStatus != "合格")
  93. return false;
  94. return !SignOfflineMatNo.Contains(p.MatNo);
  95. }
  96. )
  97. .ToList();
  98. try
  99. {
  100. currentEntity.OfflineNum = listOk.Count;
  101. listOk.ForEach(AddWes);
  102. currentEntity.OfflineWt =
  103. currentEntity.ListPortMarts.Where(p => p.Check).Sum(p => p.ActWeight);
  104. currentEntity.Chk = true;
  105. }
  106. catch (Exception)
  107. {
  108. currentEntity.OfflineNum = 0;
  109. currentEntity.OfflineWt = 0;
  110. }
  111. Office.Add(currentEntity);
  112. }
  113. mchOfflineResultEntityBindingSource.DataSource = Office;
  114. ultraGridDetailDes1.Rows[0].Activated = true;
  115. }
  116. private void CloseFrm()
  117. {
  118. this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
  119. this.Close();
  120. }
  121. protected override void OnLoad(EventArgs e)
  122. {
  123. base.OnLoad(e);
  124. ultraGridDetailDes1.DisplayLayout.Override.AllowRowFiltering = DefaultableBoolean.False;
  125. ultraGridDetailDes1.DisplayLayout.Override.HeaderClickAction = HeaderClickAction.Default;
  126. var dt =
  127. ServerHelper.GetData(
  128. "com.steering.mes.mcp.common.PlanService.getBaseInfo",
  129. new object[] { "7014" }, ob);
  130. ucMemo.DataSource = dt;
  131. ucMemo.DisplayMember = "BASENAME";
  132. ucMemo.ValueMember = "BASENAME";
  133. }
  134. /// <summary>
  135. /// 保存离线
  136. /// </summary>
  137. private void Save()
  138. {
  139. this.ultraGridDetailDes1.UpdateData();
  140. if (MessageUtil.ShowYesNoAndQuestion("是否离线?") == DialogResult.No) return;
  141. var list1 =
  142. mchOfflineResultEntityBindingSource.DataSource as List<MchOfflineResultEntity>;
  143. list1 = list1.Where(p => p.Chk).ToList();
  144. if (list1.Any(p => p.OfflineNum == null || p.OfflineNum == 0))
  145. {
  146. MessageUtil.ShowTips("支数不能为空或者为零支,请输入!");
  147. return;
  148. }
  149. if (list1.Any(p => !p.OfflineNum.ToString2().TryParseInt()))
  150. {
  151. MessageUtil.ShowTips("支数请输入整数!");
  152. return;
  153. }
  154. if (list1.Any(p => string.IsNullOrEmpty(p.Memo)))
  155. {
  156. MessageUtil.ShowTips("请选择离线原因!");
  157. return;
  158. }
  159. CoreClientParam ccp = new CoreClientParam();
  160. try
  161. {
  162. this.Cursor = Cursors.WaitCursor; //控制鼠标的样式为等待
  163. if (Constant.WaitingForm == null)
  164. {
  165. Constant.WaitingForm = new WaitingForm();
  166. }
  167. Constant.WaitingForm.ShowToUser = true;
  168. Constant.WaitingForm.Show();
  169. Constant.WaitingForm.Update();
  170. ccp.ServerName = "com.steering.mes.mcp.common.OfflineHelper";
  171. ccp.MethodName = "MchOffLine";
  172. ccp.ServerParams = new Object[] { list1.Select(JSONFormat.Format).ToList() };
  173. ccp = this.ExecuteNonQuery(ccp, CoreInvokeType.Internal);
  174. this.Cursor = Cursors.Default;
  175. Constant.WaitingForm.ShowToUser = false;
  176. Constant.WaitingForm.Close();
  177. Constant.WaitingForm = null;
  178. }
  179. catch (Exception ex)
  180. {
  181. this.Cursor = Cursors.Default;
  182. Constant.WaitingForm.ShowToUser = false;
  183. Constant.WaitingForm.Close();
  184. Constant.WaitingForm = null;
  185. }
  186. if (ccp.ReturnCode != -1)
  187. {
  188. MessageUtil.ShowTips(ccp.ReturnInfo);
  189. if (ccp.ReturnInfo.Equals("离线成功!"))
  190. {
  191. this.DialogResult = System.Windows.Forms.DialogResult.OK;
  192. }
  193. }
  194. }
  195. private void ultraGridDetailDes1_CellChange(object sender, Infragistics.Win.UltraWinGrid.CellEventArgs e)
  196. {
  197. this.ultraGridDetailDes1.UpdateData();
  198. GridEdite(e.Cell.Row);
  199. MchOfflineResultEntity Entity = e.Cell.Row.ListObject as MchOfflineResultEntity;
  200. if ((e.Cell.Column.Key == "Check") && e.Cell.Row.HasParent())
  201. {
  202. var t =
  203. e.Cell.Row.ListObject as PortMchBatchSampleResultEntityWithCheck;
  204. if ((bool)e.Cell.Value)
  205. AddWes(t);
  206. else
  207. RemoveWes(t);
  208. ultraGridDetailDes1.UpdateData();
  209. var MchOfflineResultEntity = e.Cell.Row.ParentRow.ListObject as MchOfflineResultEntity;
  210. MchOfflineResultEntity.OfflineNum = MchOfflineResultEntity.ListPortMarts.Count(p => p.Check);
  211. MchOfflineResultEntity.OfflineWt =
  212. MchOfflineResultEntity.ListPortMarts.Where(p => p.Check).Sum(p => p.ActWeight);
  213. }
  214. else if ((e.Cell.Column.Key == "OfflineNum") && e.Cell.Row.HasChild())
  215. {
  216. var MchOfflineResultEntity = e.Cell.Row.ListObject as MchOfflineResultEntity;
  217. if ((MchOfflineResultEntity != null) && (MchOfflineResultEntity.OfflineNum != null))
  218. {
  219. var signedData = MchOfflineResultEntity.ListPortMarts.Where(p => p.Check).ToList();
  220. int count = 0;
  221. if (!int.TryParse(MchOfflineResultEntity.OfflineNum.ToString3(), out count))
  222. {
  223. count = 0;
  224. }
  225. if (signedData.Count >= count)
  226. signedData.Skip(count).ToList().ForEach(RemoveWes);
  227. else
  228. MchOfflineResultEntity.ListPortMarts.Where(p =>
  229. {
  230. if (p.InstoreFlag == "已入库" || p.MatStatus != "合格")
  231. return false;
  232. return !SignOfflineMatNo.Contains(p.MatNo);
  233. }
  234. ).ToList()
  235. .OrderBy(
  236. p=> p.IsSamplePipe
  237. ).ThenBy(p=>p.MatNo)
  238. .Take(count - signedData.Count).ToList().ForEach(
  239. AddWes
  240. );
  241. var listCheck = MchOfflineResultEntity.ListPortMarts.Where(p => p.Check).ToList();
  242. int Count = listCheck.Count;
  243. if (Count < count)
  244. {
  245. MessageBox.Show("无足够的合格管可以离线,请检查是否入库或者已经离线!");
  246. MchOfflineResultEntity.OfflineNum = Count;
  247. ultraGridDetailDes1.PerformAction(UltraGridAction.ExitEditMode);
  248. }
  249. MchOfflineResultEntity.OfflineWt =
  250. MchOfflineResultEntity.ListPortMarts.Where(p => p.Check).Sum(p => p.ActWeight);
  251. }
  252. }
  253. ultraGridDetailDes1.UpdateData();
  254. if (e.Cell.Row.HasParent()) ultraGridDetailDes1.PerformAction(UltraGridAction.ExitEditMode);
  255. ultraGridDetailDes1.Refresh();
  256. }
  257. public void AddWes(PortMchBatchSampleResultEntityWithCheck t)
  258. {
  259. try
  260. {
  261. if (t.InstoreFlag == "已入库")
  262. {
  263. MessageBox.Show("该管号已入库!");
  264. t.Check = false;
  265. return;
  266. }
  267. if (t.MatStatus != "合格")
  268. {
  269. MessageBox.Show("该管号不是合格管号!");
  270. t.Check = false;
  271. return;
  272. }
  273. if (SignOfflineMatNo.Contains(t.MatNo))
  274. {
  275. MessageBox.Show("该管号在另一行已被标记将要离线!");
  276. t.Check = false;
  277. return;
  278. }
  279. SignOfflineMatNo.Add(t.MatNo);
  280. t.Check = true;
  281. }
  282. catch (Exception ex)
  283. {
  284. MessageBox.Show(ex.Message);
  285. t.Check = false;
  286. }
  287. }
  288. public void RemoveWes(PortMchBatchSampleResultEntityWithCheck t)
  289. {
  290. try
  291. {
  292. t.Check = false;
  293. SignOfflineMatNo.Remove(t.MatNo);
  294. }
  295. catch (Exception ex)
  296. {
  297. }
  298. }
  299. /// <summary>
  300. ///
  301. /// ulltragrid控件受勾影响(打钩可编辑,不打勾不能编辑)**
  302. /// </summary>
  303. /// <param name="row"></param>
  304. private void GridEdite(UltraGridRow row)
  305. {
  306. if(row.HasParent()) return;
  307. if (row.GetValue("Chk") == "True")
  308. {
  309. foreach (UltraGridCell cell in row.Cells)
  310. {
  311. if (cell.Column.CellActivation == Activation.AllowEdit)
  312. {
  313. cell.Activation = Activation.AllowEdit;
  314. }
  315. }
  316. }
  317. else
  318. {
  319. foreach (UltraGridCell cell in row.Cells)
  320. {
  321. if (cell.Column.Key.Contains("Chk")) continue;
  322. if (cell.Column.CellActivation == Activation.AllowEdit)
  323. {
  324. cell.Activation = Activation.ActivateOnly;
  325. }
  326. }
  327. }
  328. ultraGridDetailDes1.UpdateData();
  329. }
  330. private void ultraGridDetailDes1_AfterRowInsert(object sender, RowEventArgs e)
  331. {
  332. this.ultraGridDetailDes1.UpdateData();
  333. MchOfflineResultEntity currentEntity = e.Row.ListObject as MchOfflineResultEntity;
  334. currentEntity.HeatPlanNo = _heatPlanNo;
  335. currentEntity.BatchNo = _batchNo;
  336. currentEntity.ProUser = _userName;
  337. currentEntity.ProShift = _shift;
  338. currentEntity.ProGroup = _group;
  339. currentEntity.StationCode = _gx;
  340. currentEntity.PlineCode =list.Any()? list[0].PlineCode:"";
  341. currentEntity.ListPortMarts = list.Select(p => p.Clone()).ToList();
  342. var listOk = currentEntity.ListPortMarts.Where(p =>
  343. {
  344. if (p.InstoreFlag == "已入库" || p.MatStatus != "合格")
  345. return false;
  346. return !SignOfflineMatNo.Contains(p.MatNo);
  347. }
  348. )
  349. .ToList();
  350. try
  351. {
  352. currentEntity.OfflineNum = listOk.Count;
  353. listOk.ForEach(AddWes);
  354. currentEntity.OfflineWt =
  355. currentEntity.ListPortMarts.Where(p => p.Check).Sum(p => p.ActWeight);
  356. }
  357. catch (Exception)
  358. {
  359. currentEntity.OfflineNum = 0;
  360. currentEntity.OfflineWt = 0;
  361. }
  362. ultraGridDetailDes1.DisplayLayout.Bands[1].Columns["BarCode"].PerformAutoResize(Infragistics.Win.UltraWinGrid.PerformAutoSizeType.AllRowsInBand,
  363. true);
  364. ultraGridDetailDes1.DisplayLayout.Bands[1].Columns["MeasuringSeq"].PerformAutoResize(Infragistics.Win.UltraWinGrid.PerformAutoSizeType.AllRowsInBand,
  365. true);
  366. GridEdite(e.Row);
  367. ultraGridDetailDes1.UpdateData();
  368. ultraGridDetailDes1.Refresh();
  369. }
  370. private void ultraGridDetailDes1_InitializeTemplateAddRow(object sender, InitializeTemplateAddRowEventArgs e)
  371. {
  372. if (ultraGridDetailDes1.ActiveRow == null)
  373. e.TemplateAddRow.Activated = true;
  374. }
  375. }
  376. }