using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; using Core.Mes.Client.Comm.Control; using Core.Mes.Client.Comm.Format; using Core.Mes.Client.Comm.Tool; using Core.StlMes.Client.LgResMgt.Mcms.entity; using CoreFS.CA06; using Infragistics.Win.UltraWinGrid; using NPOI.SS.UserModel; using System.Drawing; namespace Core.StlMes.Client.LgResMgt.Mcms { public partial class FrmBlankPrediction : FrmBase { public List Grades; public FrmBlankPrediction() { InitializeComponent(); this.IsLoadUserView = true; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); RegStartTime.Value = DateTime.Parse(DateTime.Now.AddDays(-4).ToString("yyyy-MM-dd 07:00:00")); RegEndTime.Value = DateTime.Parse(DateTime.Now.AddDays(1).ToString("yyyy-MM-dd 07:00:00")); EntityHelper.ShowGridCaption(CrackDetectGrid.DisplayLayout.Bands[0]); DoQuery(); } public override void ToolBar_Click(object sender, string ToolbarKey) { switch (ToolbarKey) { case "DoQuery": DoQuery(); break; case "DoUpdate": DoUpdate(); break; case "DoAdd": DoAdd(); break; case "DoDelete": DoDelete(); break; case "DoUpload": DoUpload(); break; case "Export": GridHelper.ulGridToExcel(CrackDetectGrid, "钢坯采购入场预报"); break; case "DoFinish": DoFinish(); break; case "DoClose": Close(); break; case "DoUpdateMemo": DoUpdateMemo(); break; } } private void DoUpload() { List list = null; var openFileDialog = new OpenFileDialog { Filter = @"管坯来料清单|*.xls;*.xlsx" }; if (openFileDialog.ShowDialog() == DialogResult.OK) { list = ReadExcelToEntity(openFileDialog.FileName); if ((list != null) && list.Any()) using (var blankPrediction = new BlankPredictionUpload(ob, list)) { if (blankPrediction.ShowDialog() == DialogResult.OK) DoQuery(); } } } public List ReadExcelToEntity(string fileName) { var changeGrade = new Dictionary(); //定义要返回的datatable对象 var cmmBlankPredictionEntitys = new List(); List OrderData = new List(); try { if (!File.Exists(fileName)) return null; //根据指定路径读取文件 using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { //根据文件流创建excel数据结构 var workbook = WorkbookFactory.Create(fs); //IWorkbook workbook = new HSSFWorkbook(fs); for (var k = 0; k < workbook.NumberOfSheets; k++) { var sheet = workbook.GetSheetAt(k); var columns = new Dictionary(); if (sheet != null) { var rowCount = sheet.LastRowNum; var checkShipper = true; var shipperName = ""; for (var i = 0; i <= rowCount; i++) { var row = sheet.GetRow(i); if (row == null) continue; if (columns.Any()) { var valid = false; var entity = new CmmBlankPredictionEntity { CreateName = UserInfo.GetUserName() }; if (checkShipper && !columns.ContainsValue("ShippersName")) { if (Comm.Show( "Excel未解析出来料厂家!, 是否手动录入", "提示 ", MessageBoxButtons.YesNo, new[] {"录入", "跳过"}) == DialogResult.Yes) using (var fractureInfo = new ProjectName("来料厂家")) { fractureInfo.ShowDialog(); if (fractureInfo.DialogResult == DialogResult.OK) shipperName = fractureInfo.ProjectNameStr; } checkShipper = false; } for (var i1 = row.Cells.Count - 1; i1 >= 0; i1--) { var valueStr = GetCellValue(row.Cells[i1]); if (valueStr.Contains("合计")) continue; if (columns.ContainsKey(i1) && !string.IsNullOrEmpty(valueStr)) if (columns[i1].ToString2() == "JudgeStoveNo") { entity.JudgeStoveNo = valueStr; valid = true; } else if (columns[i1].ToString2() == "Gradename") { if ((Grades == null) || !Grades.Any()) Grades = EntityHelper.GetData( "com.steering.Mcms.BlankPredictionServer.doQueryGrades", new object[] {}, ob); if (changeGrade.ContainsKey(valueStr)) valueStr = changeGrade[valueStr]; var selectGrade = Grades.Where(p => p.Gradename == valueStr).ToList(); if (!selectGrade.Any()) { var result = Comm.Show( "导入钢种[" + valueStr + "]在产销系统找不到对应钢种!, 是否手动选择", "提示 ", MessageBoxButtons.YesNoCancel, new[] {"手动选择", "跳过", "取消导入"}); if (result == DialogResult.Yes) using ( var gradeSelect = new GradeSelect(ob, Grades, "导入钢种:" + valueStr)) { if (gradeSelect.ShowDialog() == DialogResult.OK) { entity.Gradename = gradeSelect.SelectRow.Gradename; entity.Gradecode = gradeSelect.SelectRow.Gradecode; changeGrade.Add(valueStr, entity.Gradename); valid = true; } } else if (result == DialogResult.No) continue; else if (result == DialogResult.Cancel) return null; } else { entity.Gradename = valueStr; entity.Gradecode = selectGrade[0].Gradecode; valid = true; } } else if (columns[i1].ToString2() == "ActDimater") { decimal value; if (decimal.TryParse(valueStr, out value)) { entity.ActDimater = value; valid = true; } } else if (columns[i1].ToString2() == "ActLen") { entity.ActLen = valueStr; valid = true; } else if (columns[i1].ToString2() == "SingleLen") { entity.SingleLen = valueStr; valid = true; } else if (columns[i1].ToString2() == "PlanNum") { decimal value; if (decimal.TryParse(valueStr, out value)) { valid = true; entity.PlanNum = value; } } else if (columns[i1].ToString2() == "PlanWt") { decimal value; if (decimal.TryParse(valueStr, out value)) { entity.PlanWt = value; valid = true; } } else if (columns[i1].ToString2() == "OrderNoSeq") { entity.OrderSqe = valueStr; valid = true; } else if (columns[i1].ToString2() == "OrderNo") { entity.OrderNo = valueStr; valid = true; } else if (columns[i1].ToString2() == "ShippersName") { entity.ShippersName = valueStr; valid = true; } else if (columns[i1].ToString2() == "Memo") { entity.Memo = valueStr; valid = true; } else if (columns[i1].ToString2() == "InstoreType") { if (valueStr == "过磅重量") { entity.InstoreType = "1"; } else if (valueStr == "清单重量") { entity.InstoreType = "2"; } else if (valueStr == "随车磅单") { entity.InstoreType = "3"; } else { entity.InstoreType = "4"; } valid = true; } } if (!string.IsNullOrWhiteSpace(shipperName) && string.IsNullOrWhiteSpace(entity.ShippersName)) entity.ShippersName = shipperName; if (!OrderData.Any()) { OrderData = EntityHelper.GetData( "com.steering.Mcms.BlankPredictionServer.doQueryOrder", new object[] { }, ob); } if (valid) { var exits = OrderData.Where( p => p.OrderNo == entity.OrderNo && (string.IsNullOrWhiteSpace(entity.OrderSqe) || p.OrderSqe == entity.OrderSqe) && p.LenGpSingle.ToString2() == entity.SingleLen.ToString2() && p.Gradename == entity.Gradename && p.Diameter == entity.ActDimater ).ToList(); if (!exits.Any()) { exits = OrderData.Where( p => p.OrderNo == entity.OrderNo && p.Gradecode == entity.Gradecode && p.Diameter == entity.ActDimater && (string.IsNullOrWhiteSpace(entity.OrderSqe) || p.OrderSqe == entity.OrderSqe)).ToList(); } if (exits.Any()) { entity.OrdNoPk = exits[0].OrdNoPk; entity.OrdSqePk = exits[0].OrdSqePk; entity.OrderNo = exits[0].OrderNo; entity.OrderSqe = exits[0].OrderSqe; entity.TypeFlag = exits[0].TypeFlag; entity.ProOrderNo = entity.OrderNo + "/" + entity.OrderSqe; } else { var result = Comm.Show( "导入的合同[" + entity.OrderNo + "] 行号[ " + entity.OrderSqe + "] 钢种["+ entity.Gradename+"] 直径["+entity.ActDimater+"] 单倍长[" + entity.SingleLen + "] 长度[" + entity.ActLen + "] 在产销系统找不到对应合同信息!, 是否手动选择", "提示 ", MessageBoxButtons.YesNoCancel, new[] {"手动选择", "跳过", "取消导入"}); if (result == DialogResult.Yes) using ( var orderSelect = new OrderSelect(ob, OrderData)) { if (orderSelect.ShowDialog() == DialogResult.OK) { entity.OrdNoPk = orderSelect.SelectRow.OrdNoPk; entity.OrdSqePk = orderSelect.SelectRow.OrdSqePk; entity.OrderNo = orderSelect.SelectRow.OrderNo; entity.OrderSqe = orderSelect.SelectRow.OrderSqe; entity.TypeFlag = orderSelect.SelectRow.TypeFlag; entity.ProOrderNo = orderSelect.SelectRow.ProOrderNo; } else { continue; } } else if (result == DialogResult.No) continue; else if (result == DialogResult.Cancel) return null; } cmmBlankPredictionEntitys.Add(entity); } } else { if (!row.Cells.Any()) continue; if (row.Cells[0].IsMergedCell) continue; for (var i1 = 0; i1 < row.Cells.Count; i1++) if (row.GetCell(i1).ToString2().Contains("炉号")) columns.Add(i1, "JudgeStoveNo"); else if (row.GetCell(i1).ToString2().Contains("钢种")) columns.Add(i1, "Gradename"); else if (row.GetCell(i1).ToString2().Contains("外径")) columns.Add(i1, "ActDimater"); else if (row.GetCell(i1).ToString2().Contains("长度") && !row.GetCell(i1).ToString2().Contains("单倍")) columns.Add(i1, "ActLen"); else if (row.GetCell(i1).ToString2().Contains("单倍")) columns.Add(i1, "SingleLen"); else if (row.GetCell(i1).ToString2().Contains("支数")) columns.Add(i1, "PlanNum"); else if (row.GetCell(i1).ToString2().Contains("入库重量类型")) columns.Add(i1, "InstoreType"); else if (row.GetCell(i1).ToString2().Contains("重量")) columns.Add(i1, "PlanWt"); else if (row.GetCell(i1).ToString2().Contains("厂家")) columns.Add(i1, "ShippersName"); else if (row.GetCell(i1).ToString2().Contains("合同行号")) columns.Add(i1, "OrderNoSeq"); else if (row.GetCell(i1).ToString2().Contains("合同")) columns.Add(i1, "OrderNo"); else if (row.GetCell(i1).ToString2().Contains("备注")) columns.Add(i1, "Memo"); } } } } } return cmmBlankPredictionEntitys; } catch (Exception ex) { MessageBox.Show(@"EXCEL格式错误:" + ex.Message); return null; } } private string GetCellValue(ICell cell) { if (cell == null) return ""; var value = ""; switch (cell.CellType) { case CellType.Blank: value = ""; break; case CellType.Numeric: var format = cell.CellStyle.DataFormat; value = cell.NumericCellValue.ToString2(); break; case CellType.String: value = cell.StringCellValue; break; } return value; } private void DoFinish() { List list; if ((CrackDetectGrid.Selected.Rows.Count <= 0) && (CrackDetectGrid.ActiveRow == null)) { MessageBox.Show("请选择需要强制完成的数据!"); return; } if (CrackDetectGrid.Selected.Rows.Count <= 0) list = new List { (CrackDetectGrid.ActiveRow.ListObject as CmmBlankPredictionEntity).PredictionId }; else list = (from UltraGridRow p in CrackDetectGrid.Selected.Rows select p.ListObject as CmmBlankPredictionEntity).Select(p => p.PredictionId).ToList(); var ccp = new CoreClientParam(); ccp.ServerName = "com.steering.Mcms.BlankPredictionServer"; ccp.MethodName = "DoFinish"; ccp.ServerParams = new object[] { list, UserInfo.GetUserName() }; ccp = ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode != -1) { MessageUtil.ShowTips(ccp.ReturnInfo); if (ccp.ReturnInfo.Contains("成功!")) DoQuery(); } } private void DoDelete() { List list; if ((CrackDetectGrid.Selected.Rows.Count <= 0) && (CrackDetectGrid.ActiveRow == null)) { MessageBox.Show("请选择需要删除的数据!"); return; } if (CrackDetectGrid.Selected.Rows.Count <= 0) list = new List { (CrackDetectGrid.ActiveRow.ListObject as CmmBlankPredictionEntity).PredictionId }; else list = (from UltraGridRow p in CrackDetectGrid.Selected.Rows select p.ListObject as CmmBlankPredictionEntity).Select(p => p.PredictionId).ToList(); var ccp = new CoreClientParam(); ccp.ServerName = "com.steering.Mcms.BlankPredictionServer"; ccp.MethodName = "DoDelete"; ccp.ServerParams = new object[] { list, UserInfo.GetUserName() }; ccp = ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode != -1) { MessageUtil.ShowTips(ccp.ReturnInfo); if (ccp.ReturnInfo.Contains("成功!")) DoQuery(); } } private void DoAdd() { CmmBlankPredictionEntity entity = GetEntity(true); var ccp = new CoreClientParam(); ccp.ServerName = "com.steering.Mcms.BlankPredictionServer"; ccp.MethodName = "DoAdd"; ccp.ServerParams = new object[] { JSONFormat.Format(entity) }; ccp = ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode != -1) { MessageUtil.ShowTips(ccp.ReturnInfo); if (ccp.ReturnInfo.Contains("成功!")) DoQuery(); } } private void DoUpdate() { CmmBlankPredictionEntity entity = GetEntity(false); var ccp = new CoreClientParam(); ccp.ServerName = "com.steering.Mcms.BlankPredictionServer"; ccp.MethodName = "DoUpdate"; ccp.ServerParams = new object[] { JSONFormat.Format(entity) }; ccp = ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode != -1) { MessageUtil.ShowTips(ccp.ReturnInfo); if (ccp.ReturnInfo.Contains("成功!")) DoQuery(); } } private void DoQuery() { var dic = new Dictionary(); if (chkJudgeStove.Checked) dic.Add("judgeStoveNo", txtJudgeStove.Text); if (chkOrderNo.Checked) dic.Add("proOrderNo", txtOrderNo.Text); if (chkShippersName.Checked) dic.Add("shippersName", uteShippersName.Text); if (chkTim.Checked) { dic.Add("time", RegStartTime.Value.ToString("yyyy-MM-dd HH:mm:ss")); dic.Add("time1", RegEndTime.Value.ToString("yyy-MM-dd HH:mm:ss")); } if (chkStatus.Checked && cboStatus.CheckedItems.Count>0) { dic.Add("validflag", cboStatus.CheckedItems.Select(p => p.DataValue.ToString()).ToList()); } else { dic.Add("validflag", new List() { "1","2","3"}); } cmmBlankPredictionEntityBindingSource.DataSource = EntityHelper.GetData( "com.steering.Mcms.BlankPredictionServer.doQuery", new object[] {dic}, ob); Comm.RefreshAndAutoSize(CrackDetectGrid); } private void CrackDetectGrid_AfterRowActivate(object sender, EventArgs e) { CmmBlankPredictionEntity entity = CrackDetectGrid.ActiveRow.ListObject as CmmBlankPredictionEntity; if(entity==null) return; uteShippersNameE.Text = entity.ShippersName; uteGradnameE.Text = entity.Gradename; uteGradnameE.Tag = entity.Gradecode; uteProOrderNoE.Text = entity.ProOrderNo; uteJudgeStoveNo.Text = entity.JudgeStoveNo; uteMemo.Text = entity.Memo; uteId.Text = entity.PredictionId; uteOrdPk.Text = entity.OrdNoPk; uteOrderSeqPk.Text = entity.OrdSqePk; uteOrderNo.Text = entity.OrderNo; uteOrderSeq.Text = entity.OrderSqe; uceEditType.Value = entity.TypeFlag; txbPipememo.Text = entity.Pipememo; uneActLen.Value = null; int len; if (int.TryParse(entity.ActLen, out len)) uneActLen.Value = len; uneSingleLen.Value = null; int singleLen; if (int.TryParse(entity.SingleLen, out singleLen)) uneSingleLen.Value = singleLen; uneActDimater.Value = null; int dimater; if (int.TryParse(entity.ActDimater.ToString2(), out dimater)) uneActDimater.Value = dimater; unePlanNum.Value = null; int num; if (int.TryParse(entity.PlanNum.ToString2(), out num)) unePlanNum.Value = num; unePlanWt.Value = null; double wt; if (double.TryParse(entity.PlanWt.ToString2(), out wt)) unePlanWt.Value = wt; editType.Value = entity.InstoreType; } private CmmBlankPredictionEntity GetEntity(bool isNew) { CmmBlankPredictionEntity entity = new CmmBlankPredictionEntity() { ShippersName = uteShippersNameE.Text, Gradename = uteGradnameE.Text, Gradecode = uteGradnameE.Tag.ToString2(), ProOrderNo = uteProOrderNoE.Text, JudgeStoveNo = uteJudgeStoveNo.Text, PredictionId = isNew ? "" : uteId.Text, ActLen = uneActLen.Value.ToString2(), SingleLen = uneSingleLen.Value.ToString2(), Memo = uteMemo.Text, OrdNoPk = uteOrdPk.Text, OrdSqePk = uteOrderSeqPk.Text, OrderNo = uteOrderNo.Text, OrderSqe = uteOrderSeq.Text, TypeFlag = uceEditType.Value.ToString3(), InstoreType = editType.Value.ToString2(), Pipememo = txbPipememo.Text.ToString2() }; decimal dimater; if (decimal.TryParse(uneActDimater.Value.ToString2(), out dimater)) entity.ActDimater = dimater; decimal num; if (decimal.TryParse(unePlanNum.Value.ToString2(), out num)) entity.PlanNum = num; decimal wt; if (decimal.TryParse(unePlanWt.Value.ToString2(), out wt)) entity.PlanWt = wt; if (isNew) { entity.CreateName = this.UserInfo.GetUserName(); } else { entity.UpdateName = this.UserInfo.GetUserName(); } return entity; } private void uteGradnameE_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e) { using ( var gradeSelect = new GradeSelect(ob, null, string.IsNullOrWhiteSpace(uteGradnameE.Text) ? "" : "原钢种:" + uteGradnameE.Text)) { if (gradeSelect.ShowDialog() == DialogResult.OK) { uteGradnameE.Text = gradeSelect.SelectRow.Gradename; uteGradnameE.Tag = gradeSelect.SelectRow.Gradecode; } } } private void btnMemo_Click(object sender, EventArgs e) { uteMemo.Text = "双经销合同坯料"; } private void uteProOrderNoE_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e) { using ( var orderSelect = new OrderSelect(ob, null)) { if (orderSelect.ShowDialog() == DialogResult.OK) { uteProOrderNoE.Text = orderSelect.SelectRow.ProOrderNo; uteOrdPk.Text = orderSelect.SelectRow.OrdNoPk; uteOrderSeqPk.Text = orderSelect.SelectRow.OrdSqePk; uteOrderNo.Text = orderSelect.SelectRow.OrderNo; uteOrderSeq.Text = orderSelect.SelectRow.OrderSqe; uteGradnameE.Text = orderSelect.SelectRow.Gradename; uteGradnameE.Tag = orderSelect.SelectRow.Gradecode; uneActLen.Text = orderSelect.SelectRow.Length.ToString2(); uneActDimater.Text = orderSelect.SelectRow.Diameter.ToString2(); uteShippersNameE.Text = orderSelect.SelectRow.SuppCode; uneSingleLen.Text = orderSelect.SelectRow.LenGpSingle.ToString2(); uceEditType.Value = orderSelect.SelectRow.TypeFlag ; if (orderSelect.SelectRow.TypeFlag == "1") { uceInType.Value = "0"; } } } } private void CrackDetectGrid_InitializeRow(object sender, InitializeRowEventArgs e) { try { CmmBlankPredictionEntity entity = e.Row.ListObject as CmmBlankPredictionEntity; if (entity == null) return; if (!string.IsNullOrWhiteSpace(entity.UnPoundNum)) { if (int.Parse(entity.UnPoundNum) > 0) { e.Row.Cells["UnPoundNum"].Appearance.BackColor = Color.Yellow; } else if (int.Parse(entity.UnPoundNum) < 0) { e.Row.Cells["UnPoundNum"].Appearance.BackColor = Color.Red; } } if (!string.IsNullOrWhiteSpace(entity.UnInstoreNum)) { if (int.Parse(entity.UnInstoreNum) > 0) { e.Row.Cells["UnInstoreNum"].Appearance.BackColor = Color.Yellow; } else if (int.Parse(entity.UnInstoreNum) <= 0 && double.Parse(entity.UnInstoreWt) > 0) { e.Row.Cells["UnInstoreWt"].Appearance.BackColor = Color.Red; } } int num = 0; int poundnum = 0; int.TryParse(entity.PlanNum.ToString3(), out num); int.TryParse(entity.PoundNum.ToString3(), out poundnum); if (poundnum > num) { e.Row.Cells["PoundNum"].Appearance.BackColor = Color.Red; } if (!string.IsNullOrWhiteSpace(entity.OrderFlag) && "0" == entity.OrderFlag) { e.Row.Cells["OrderNo"].Appearance.BackColor = Color.Red; } }catch(Exception ex){ } } private void uteQueryPound_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e) { CmmBlankPredictionEntity entity = CrackDetectGrid.ActiveRow.ListObject as CmmBlankPredictionEntity; if (entity == null) return; FrmPoundInfo FrmPoundInfo = new FrmPoundInfo(entity.PredictionId, ob); FrmPoundInfo.ShowDialog(); } private void uteQueryInstore_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e) { CmmBlankPredictionEntity entity = CrackDetectGrid.ActiveRow.ListObject as CmmBlankPredictionEntity; if (entity == null) return; FrmInstoreInfo FrmInstoreInfo = new FrmInstoreInfo(entity.PredictionId, ob); FrmInstoreInfo.ShowDialog(); } private void DoUpdateMemo() { List lst = new List(); IQueryable checkMagRows = this.CrackDetectGrid.Rows.AsQueryable().Where(" Chk = 'True'"); foreach (UltraGridRow p in checkMagRows) { CmmBlankPredictionEntity entity = p.ListObject as CmmBlankPredictionEntity; lst.Add(entity.PredictionId); } var ccp = new CoreClientParam { ServerName = "com.steering.Mcms.BlankPredictionServer", MethodName = "DoUpdateMemo", ServerParams = new object[] { lst, txbPipememo.Text.ToString(), txtMemo.Text.ToString() } }; ccp = ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode != -1) { MessageUtil.ShowTips(ccp.ReturnInfo); if (ccp.ReturnInfo.Contains("成功!")) DoQuery(); } } private void chkMemo_CheckedChanged(object sender, EventArgs e) { if (chkMemo.Checked == true) { foreach (var ultraGridRow in CrackDetectGrid.Rows) { if (ultraGridRow.VisibleIndex>-1) ultraGridRow.Cells["Chk"].Value = true; } } else { foreach (var ultraGridRow in CrackDetectGrid.Rows) { if (ultraGridRow.VisibleIndex >-1) ultraGridRow.Cells["Chk"].Value = false; } } Comm.RefreshAndAutoSize(CrackDetectGrid); } } }