using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; using System.Windows.Forms; using System.Windows.Input; using Core.Mes.Client.Comm.Format; using Core.Mes.Client.Comm.Server; using Core.Mes.Client.Comm.Tool; using Core.StlMes.Client.Mcp.Control.Common; using Core.StlMes.Client.Mcp.Control.Entity; using CoreFS.CA06; using Infragistics.Win; using Infragistics.Win.UltraWinGrid; using NPOI.SS.Formula.Functions; namespace Core.StlMes.Client.Mcp.Control.Machining { public partial class FinalCheckGControl : UserControl { protected List Names = new List(); protected string _plineCode = ""; public FinalCheckGControl() { InitializeComponent(); EntityHelper.ShowGridCaption(ultraGrid1.DisplayLayout.Bands[0]); //commHelper.RefreshAndAutoSizeExceptColumns(ultraGrid1, "UnPass"); var list = new ValueList(); list.ValueListItems.Add(new ValueListItem("0", "合格")); list.ValueListItems.Add(new ValueListItem("1", "不合")); list.ValueListItems.Add(new ValueListItem("2", "废品")); ultraGrid1.DisplayLayout.Bands[0].Columns["Station"].ValueList = list; } private OpeBase ob; private string BatchNo = ""; //是否有喷印管号 private bool isMeasureData = false; public void Init(OpeBase _ob) { ultraGrid1.DisplayLayout.Override.AllowRowFiltering = DefaultableBoolean.False; ultraGrid1.DisplayLayout.Override.HeaderClickAction = HeaderClickAction.Default; ob = _ob; } private List _portHttBatchSampleResultEntitys; private List _UncheckPort; private List _checkPort; public List ProMchPort { get { return _checkPort; } } public List Detail { get; private set; } private MchFinalCheckResultEntity Data; public MchFinalCheckResultEntity GetData() { if(Data==null) Data=new MchFinalCheckResultEntity(); Data.ProNum = ProMchPort.Count; Data.ProWt = ProMchPort.Sum(p => p.ActWeight); Data.CheckNum = Detail.Where(p=>!string.IsNullOrWhiteSpace(p.SizeCheck)).Select(p=>p.MatNo).Distinct().Count(); Data.CheckWt = ProMchPort.Where(p => Detail.Any(q=>!string.IsNullOrWhiteSpace(q.SizeCheck) && q.MatNo==p.MatNo)).Sum(p => p.ActWeight); Data.ProShift = uceBc.Value.ToString2(); Data.ProGroup = uceBz.Value.ToString2(); Data.ProTime = udeProData.Value.ToString2(); Data.ProUser = txtUserName.Text; Data.UnqualifiedNum = Detail.Where(p => p.Station == "1").Select(p => p.MatNo).Distinct().Count(); Data.UnqualifiedWt = ProMchPort.Where(p => Detail.Any(q => q.MatNo == p.MatNo && q.Station == "1")).Sum(p => p.ActWeight); Data.FailNum = Detail.Where(p => p.Station == "2").Select(p => p.MatNo).Distinct().Count(); Data.FailWt = ProMchPort.Where(p => Detail.Any(q => q.MatNo == p.MatNo && q.Station == "2")).Sum(p => p.ActWeight); Data.QualifiedNum = Data.CheckNum - Data.UnqualifiedNum; Data.QualifiedWt = Data.CheckWt - Data.UnqualifiedWt; Data.ResultType = "0"; return Data; } public void SetValue(MchFinalCheckResultEntity value, List port ) { Data = value; isMeasureData = port.Any(p => p.MeasuringSeq != null); _portHttBatchSampleResultEntitys = isMeasureData ? port.Where(p => (p.MatStatus == "合格" || p.MatStatus == "待处理") && p.MeasuringSeq != null ).OrderBy(p => p.MeasuringSeq).ToList() : port.Where(p => (p.MatStatus == "合格" || p.MatStatus == "待处理")).OrderBy(p => p.MatNo).ToList(); _UncheckPort = _portHttBatchSampleResultEntitys.Where(p => p.IsFinalcheck == "0").ToList(); txtUserName.Text = Data.ProUser; uceBc.Value = Data.ProShift; uceBz.Value = Data.ProGroup; _checkPort = new List(); udeProData.Value = DateTime.Now; if (_UncheckPort.Any()) { if (isMeasureData) { txtProStart.Value = _UncheckPort.Min(p => p.MeasuringSeq).ToString2(); txtProEnd.Value = _UncheckPort.Max(p => p.MeasuringSeq).ToString2(); } else { int checkNum = _portHttBatchSampleResultEntitys.TakeWhile(p => p.IsFinalcheck != "0").Count(); txtProStart.Value = checkNum + 1; txtProEnd.Value = _UncheckPort.Count + checkNum; } } else { txtProStart.Value = 1; txtProEnd.Value = 1; } Detail = new List(); mchFinalCheckTotalBindingSource.DataSource = Detail; if (_plineCode != value.PlineCode) { Names = EntityHelper.GetData( "com.steering.mes.mcp.heatTreatment.FrmHttCrackDetectResult.getHttSign", new object[] { value.PlineCode, "12" }, ob); txtUserName.DisplayMember = "UserName"; txtUserName.ValueMember = "UserName"; _plineCode = value.PlineCode; txtUserName.DataSource = Names; } ultraGrid1.DisplayLayout.Bands[0].Summaries[0].DisplayFormat = "送检0支"; ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸抽检率 0%"; } private void ultraGrid1_CellChange(object sender, CellEventArgs e) { } private void uteUnpass_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e) { MchFinalCheckGTotal entity = ultraGrid1.ActiveRow.ListObject as MchFinalCheckGTotal; bool Fail = ultraGrid1.ActiveCell.Column.Key == "ScrapReason"; var matfrm = new ReasonChooseNew(ob,string.IsNullOrWhiteSpace(entity.SizeCheck)?"703601": "7036", Fail, Fail ? entity.ScrapList : entity.UnPassList); matfrm.ShowDialog(); if (matfrm.DialogResult == DialogResult.OK) { if (Fail) { entity.ScrapList = matfrm.FailData; entity.ScrapList.ForEach(p => { p.MatNo = entity.MatNo; p.FailNum = 1; p.FailWt = _checkPort.Where(q => q.MatNo == p.MatNo).Sum(q => q.ActWeight); p.BatchNo = Data.BatchNo; p.HeatPlanNo = Data.HeatPlanNo; }); } else { entity.UnPassList = matfrm.FailData; entity.UnPassList.ForEach(p => { p.MatNo = entity.MatNo; p.FailNum = 1; p.FailWt = _checkPort.Where(q => q.MatNo == p.MatNo).Sum(q => q.ActWeight); p.BatchNo = Data.BatchNo; p.HeatPlanNo = Data.HeatPlanNo; }); } entity.Station = entity.ScrapList.Any() ? "2" : entity.UnPassList.Any() ? "1" : "0"; if (entity.Station == "1" || entity.Station =="2") { ultraGrid1.ActiveCell.Row.Cells["Station"].Appearance.BackColor = Color.Red; } else { ultraGrid1.ActiveCell.Row.Cells["Station"].Appearance.ResetBackColor(); } if (entity.Station == "2") { entity.UnPassList = new List(); } ultraGrid1.PerformAction(UltraGridAction.ExitEditMode); mchFinalCheckTotalBindingSource.ResetBindings(false); ultraGrid1.UpdateData(); } } private void txtDir_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar ==13) { btnSizeAdd_Click(null, null); } } private void ultraGrid1_InitializeRowsCollection(object sender, InitializeRowsCollectionEventArgs e) { foreach (var ultraGridRow in e.Rows) { if (ultraGridRow.Cells["Station"].Value.ToString2() == "1") { ultraGridRow.Cells["Station"].Appearance.BackColor = Color.Red; } else if (ultraGridRow.Cells["Station"].Value.ToString2() == "2") { ultraGridRow.Cells["Station"].Appearance.BackColor = Color.Red; } else { ultraGridRow.Cells["Station"].Appearance.ResetBackColor(); } } } private void btnCheck_Click(object sender, EventArgs e) { int Start = 0; int Frequency = 0; if (!int.TryParse(txtStart.Value.ToString3(), out Start) || Start <= 0) { MessageBox.Show("请输入正确的起始管号"); return; } if (!int.TryParse(uceFrequency.Text, out Frequency) && Frequency <= 0) { MessageBox.Show("请输入正确的抽取频率"); return; } for (int i = 0, j = Start - 1; j < Detail.Count; j = (++i) * Frequency + Start - 1) { Detail[j].SizeCheck = "√"; } mchFinalCheckTotalBindingSource.DataSource = Detail; int CheckNum = Detail.Count(p => p.SizeCheck == "√"); ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸检查 " + CheckNum + "支 抽检率 " +(Detail.Count==0? 0: CheckNum * 100 / Detail.Count )+ "%"; } private void cmsCopy_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { ultraGrid1.UpdateData(); if ( ultraGrid1.ActiveRow == null) { return; } MchFinalCheckGTotal entity; if (ultraGrid1.ActiveRow.HasParent()) { entity = ultraGrid1.ActiveRow.ParentRow.ListObject as MchFinalCheckGTotal; } else { entity = ultraGrid1.ActiveRow.ListObject as MchFinalCheckGTotal; } if (e.ClickedItem.Name == "tmsCopyToAll") { List list = mchFinalCheckTotalBindingSource.DataSource as List; list .ForEach( p => { p.ScrapList = entity.ScrapList.Select(q => { MchBugDEntity bug = q.Clone(); bug.MatNo = p.MatNo; return bug; }).ToList(); p.UnPassList = entity.UnPassList.Select(q => { MchBugDEntity bug = q.Clone(); bug.MatNo = p.MatNo; return bug; }).ToList(); p.Station = entity.Station; }); mchFinalCheckTotalBindingSource.ResetBindings(false); ultraGrid1.UpdateData(); ultraGrid1.Rows.ToList().ForEach( p => { if (p.Cells["Station"].Value.ToString2() == "1") { p.Cells["Station"].Appearance.BackColor = Color.Red; } else if (p.Cells["Station"].Value.ToString2() == "2") { p.Cells["Station"].Appearance.BackColor = Color.Red; } else { p.Cells["Station"].Appearance.ResetBackColor(); } } ); } else if (e.ClickedItem.Name == "tmsCopyToSize") { List list = mchFinalCheckTotalBindingSource.DataSource as List; list.Where(p=>!string.IsNullOrWhiteSpace(p.SizeCheck)).ToList() .ForEach( p => { p.ScrapList = entity.ScrapList.Select(q => { MchBugDEntity bug = q.Clone(); bug.MatNo = p.MatNo; return bug; }).ToList(); p.UnPassList = entity.UnPassList.Select(q => { MchBugDEntity bug = q.Clone(); bug.MatNo = p.MatNo; return bug; }).ToList(); p.Station = entity.Station; }); mchFinalCheckTotalBindingSource.ResetBindings(false); ultraGrid1.UpdateData(); ultraGrid1.Rows.ToList().ForEach( p => { if (p.Cells["Station"].Value.ToString2() == "1") { p.Cells["Station"].Appearance.BackColor = Color.Red; } else if (p.Cells["Station"].Value.ToString2() == "2") { p.Cells["Station"].Appearance.BackColor = Color.Red; } else { p.Cells["Station"].Appearance.ResetBackColor(); } } ); } } private void btnAdd_Click(object sender, EventArgs e) { List NeedAdds = new List(); if (txtProStart.Value == null || txtProEnd.Value == null) { MessageBox.Show("请输入正确的管号区间"); return; } int Start = int.Parse(txtProStart.Value.ToString3()); int End = int.Parse(txtProEnd.Value.ToString3()); if (Start > End) { MessageBox.Show("管号区间的开始管号不能大于结束管号"); return; } if (!_UncheckPort.Any()) { MessageBox.Show("无待检的管号!"); return; } if (isMeasureData) { if (Start < _UncheckPort.Min(p => p.MeasuringSeq) || End > _UncheckPort.Max(p => p.MeasuringSeq)) { MessageBox.Show("管号不存在"); return; } NeedAdds = _UncheckPort.Where( p => p.MeasuringSeq >= Start && p.MeasuringSeq <= End && Detail.All(q => q.MatNo != p.MatNo)).ToList(); } else { if (Start < _portHttBatchSampleResultEntitys.TakeWhile(p => p.IsFinalcheck != "0").Count() || End - Start > _UncheckPort.Count) { MessageBox.Show("管号不存在"); return; } NeedAdds = _portHttBatchSampleResultEntitys.Skip(Start-1).Take(End-Start+1).Where( p => p.IsFinalcheck == "0" && Detail.All(q => q.MatNo != p.MatNo)).ToList(); } /* int offlineCout = NeedAdds.Count(p => p.MatStatus == "待处理"); if (offlineCout > 0) { MessageBox.Show("存在" + offlineCout + "支管已经离线"); return; }*/ foreach (var needAdd in NeedAdds) { Detail.Add(new MchFinalCheckGTotal() { MatNo = needAdd.MatNo, BarCode = needAdd.BarCode, MeasuringSeq = needAdd.MeasuringSeq, AppCheck = "√", Station = "0", ScrapList = new List(), UnPassList = new List() }); } _checkPort.AddRange(NeedAdds); Detail = isMeasureData ? Detail.OrderBy(p => p.MeasuringSeq).ToList() : Detail.OrderBy(p => p.MatNo).ToList(); mchFinalCheckTotalBindingSource.DataSource = Detail; ultraGrid1.DisplayLayout.Bands[0].Summaries[0].DisplayFormat = "送检 " + Detail.Count + "支 " + " 外观检查100%"; int CheckNum = Detail.Count(p => p.SizeCheck == "√"); ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸检查 " + CheckNum + "支 抽检率 " + CheckNum * 100 / Detail.Count + "%"; } private void ultraGrid1_ClickCell(object sender, ClickCellEventArgs e) { if (e.Cell.Column.Key == "SizeCheck") { if (e.Cell.Value.ToString2() != "") { e.Cell.Row.Cells["SizeCheck"].Value = ""; } else { e.Cell.Row.Cells["SizeCheck"].Value = "√"; } ultraGrid1.UpdateData(); int CheckNum = Detail.Count(p => p.SizeCheck == "√"); ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸检查 " + CheckNum + "支 抽检率 " + (CheckNum * 100d / Detail.Count).ToString("0.00") + "%"; } } private void btnClear_Click(object sender, EventArgs e) { Detail = new List(); _checkPort = new List(); mchFinalCheckTotalBindingSource.DataSource = Detail; ultraGrid1.DisplayLayout.Bands[0].Summaries[0].DisplayFormat = "送检0支"; ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸抽检率 0%"; } private void btnClear2_Click(object sender, EventArgs e) { Detail.ForEach(P=>P.SizeCheck=""); mchFinalCheckTotalBindingSource.DataSource = Detail; ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸检查 0支 抽检率 0%"; } private void btnSizeAdd_Click(object sender, EventArgs e) { if (txtDir.Text == "") { MessageBox.Show("指定管号不能为空"); return; } if (isMeasureData) { var dir = Detail.Where(p => p.MeasuringSeq.ToString2() == txtDir.Text).ToList(); if (!dir.Any()) { MessageBox.Show("找不到指定管号"); return; } dir[0].SizeCheck = "√"; } else { int dirNum = 0; if (!int.TryParse(txtDir.Text, out dirNum) || dirNum <= 0) { MessageBox.Show("请输入正确的管号"); return; } if (dirNum >= Detail.Count) { MessageBox.Show("超出抽检管号范围"); return; } Detail[dirNum - 1].SizeCheck = "√"; } mchFinalCheckTotalBindingSource.DataSource = Detail; int CheckNum = Detail.Count(p => p.SizeCheck == "√"); ultraGrid1.DisplayLayout.Bands[0].Summaries[1].DisplayFormat = "尺寸检查 " + CheckNum + "支 抽检率 " + (CheckNum * 100d / Detail.Count).ToString("0.00") + "%"; txtDir.SelectAll(); } } }