FrmScrapNum.cs 15 KB

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